anchor.diff:  		#ofp_action_copy_ttl_in{} ->
   			ok;
   		#ofp_action_push_vlan{ethertype=Ether} ->
  -			if_throw(
  +			IfThrow(
   				Ether /= 16#8100 andalso Ether /= 16#88A8,
   				{bad_action,bad_argument}
   			);
   		#ofp_action_pop_vlan{} ->
   			ok;
   		#ofp_action_push_mpls{ethertype=Ether} ->
  -			if_throw(
  +			IfThrow(
   				Ether /= 16#8847 andalso Ether /= 16#8848,
   				{bad_action,bad_argument}
   			);
   		#ofp_action_pop_mpls{} ->
   			ok;
   		#ofp_action_push_pbb{ethertype=Ether} ->
  -			if_throw(
  +			IfThrow(
   				Ether /= 16#88E7,
   				{bad_action,bad_argument}
   			);
  
positive.code: 	end.
  
  check_action(Action, Fields) ->
  	case Action of
  		#ofp_action_output{port=controller,max_len=MaxLen} ->
  			%% no_buffer represents OFPCML_NO_BUFFER (0xFFFF)
  			if_throw(
  				MaxLen /= no_buffer andalso MaxLen > ?OFPCML_MAX,
  				{bad_action,bad_argument}
  			);
  		#ofp_action_output{port=Port} ->
  			SwitchId = 0,
  			if_throw(
  				not linc_max_port:is_valid(SwitchId, Port),
  				{bad_action,bad_out_port}
  			);
  		#ofp_action_group{group_id=GroupId} ->
  			SwitchId = 0,
  			if_throw(
  				not linc_max_groups:is_valid(SwitchId, GroupId),
  				{bad_action,bad_out_group}
  			);
  
negative.code: 	NSec = Duration rem 1000000 * 1000,
  	{Sec, NSec}.
  
  match_mask(Bin1, Bin2, MaskBin) ->
  	Bits = bit_size(Bin1),
  	<<Val1:Bits>> = Bin1,
  