anchor.diff:  	updated_actions(Tag, Specs, Actions#fast_actions{group =Id}).
   
   action_list(As) ->
  -	action_list(As, {var,0,var_name(packet)}).
  -
  -action_list([], Packet) ->
  -	Packet;
  -action_list([#ofp_action_output{port =PortNo}|As], Packet) ->
  +	lists:foldl(
  +		fun
  +			(#ofp_action_set_field{field = #ofp_field{name =tunnel_id,value =Value}}, {ActionList, _}) ->
  +				{ActionList, fast_value(Value)};
  +			(Action, {ActionList, TunnelId}) ->
  +				{action_cast(Action, ActionList), TunnelId}
  +		end,
  +		{undefined, undefined},
  +		As
  +	).
  +
  +action_cast(Action, undefined) ->
  +	action_cast(Action, {var,0,var_name(packet)});
  +action_cast(#ofp_action_output{port =PortNo}, Packet) ->
   	Sink =
   		if
   			is_atom(PortNo) ->
  
positive.code: 		undefined,	%% ApplyInstr
  		undefined,	%% ClearWriteInstr
  		undefined,	%% MetadataInstr
  		undefined). %% GotoInstr
  
  body([], MeterInstr, ApplyInstr, ClearWriteInstr, MetadataInstr, GotoInstr) ->
  	compile_body(MeterInstr, ApplyInstr, ClearWriteInstr, MetadataInstr, GotoInstr);
  body([#ofp_instruction_meter{meter_id =Id}|InstrList],
  		_MeterInstr, ApplyInstr, ClearWriteInstr, MetadataInstr, GotoInstr) ->
  	body(InstrList, {meter,Id}, ApplyInstr, ClearWriteInstr, MetadataInstr, GotoInstr);
  body([#ofp_instruction_apply_actions{actions =As}|InstrList],
  		MeterInstr, _ApplyInstr, ClearWriteInstr, MetadataInstr, GotoInstr) ->
  	body(InstrList, MeterInstr, action_list(As), ClearWriteInstr, MetadataInstr, GotoInstr);
  body([#ofp_instruction_clear_actions{}|InstrList],
  		MeterInstr, ApplyInstr, undefined, MetadataInstr, GotoInstr) ->
  	body(InstrList, MeterInstr, ApplyInstr, clear, MetadataInstr, GotoInstr);
  body([#ofp_instruction_write_actions{actions =Actions}|InstrList],
  		MeterInstr, ApplyInstr, clear, MetadataInstr, GotoInstr) ->
  	body(InstrList, MeterInstr, ApplyInstr, {clear,Actions}, MetadataInstr, GotoInstr);
  body([#ofp_instruction_write_actions{actions =Actions}|InstrList],
  		MeterInstr, ApplyInstr, _ClearWriteInstr, MetadataInstr, GotoInstr) ->
  	body(InstrList, MeterInstr, ApplyInstr, {write,Actions}, MetadataInstr, GotoInstr);
  body([#ofp_instruction_write_metadata{metadata = <<Value:64>>,
  									  metadata_mask = <<Mask:64>>}|InstrList],
  		MeterInstr, ApplyInstr, ClearWriteInstr, _MetadataInstr, GotoInstr) ->
  	body(InstrList, MeterInstr, ApplyInstr, ClearWriteInstr, {metadata,Value,Mask}, GotoInstr);
  body([#ofp_instruction_goto_table{table_id =Id}|InstrList],
  		MeterInstr, ApplyInstr, ClearWriteInstr, MetadataInstr, _GotoInstr) ->
  	body(InstrList, MeterInstr, ApplyInstr, ClearWriteInstr, MetadataInstr, {goto,Id}).
  
  
  compile_body(MeterInstr, undefined, ClearWriteInstr, _MetadataInstr, undefined) ->
  	%%
  	%% No goto table - return (updated) action set
  	%%
  
negative.code: 			true ->
  				{integer,0,PortNo}
  		end,
  	action_call(output, [Packet,Sink,{var,0,var_name(blaze)}]);
  action_cast(#ofp_action_set_queue{queue_id =Queue}, Packet) ->
  	action_call(set_queue, [Packet,{integer,0,Queue}]);
  action_cast(#ofp_action_group{group_id =Group}, Packet) ->
  	action_call(group, [Packet,{integer,0,Group}]);
  action_cast(#ofp_action_push_vlan{ethertype =EthType}, Packet) ->
  	action_call(push_vlan, [Packet,{integer,0,EthType}]);
  action_cast(#ofp_action_pop_vlan{}, Packet) ->
  	action_call(pop_vlan, [Packet]);
  action_cast(#ofp_action_push_mpls{ethertype =EthType}, Packet) ->
  	action_call(push_mpls, [Packet,{integer,0,EthType}]);
  action_cast(#ofp_action_pop_mpls{ethertype =EthType}, Packet) ->
  	action_call(pop_mpls, [Packet,{integer,0,EthType}]);
  action_cast(#ofp_action_push_pbb{ethertype =EthType}, Packet) ->
  	action_call(push_pbb, [Packet,{integer,0,EthType}]);
  action_cast(#ofp_action_pop_pbb{}, Packet) ->
  	action_call(pop_pbb, [Packet]);
  action_cast(#ofp_action_set_field{field = #ofp_field{name =Name,value =Value}}, Packet) ->
  	action_call(set_field, [Packet,{atom,0,Name}, fast_value(Value)]);
  action_cast(#ofp_action_set_mpls_ttl{mpls_ttl =TTL}, Packet) ->
  	action_call(set_mpls_ttl, [Packet,{integer,0,TTL}]);
  action_cast(#ofp_action_dec_mpls_ttl{}, Packet) ->
  	action_call(decrement_mpls_ttl, [Packet]);
  action_cast(#ofp_action_set_nw_ttl{nw_ttl =TTL}, Packet) ->
  	action_call(set_ip_ttl, [Packet, {integer,0,TTL}]);
  action_cast(#ofp_action_dec_nw_ttl{}, Packet) ->
  	action_call(decrement_ip_ttl, [Packet]);
  action_cast(#ofp_action_copy_ttl_out{}, Packet) ->
  	action_call(copy_ttl_outwards, [Packet]);
  action_cast(#ofp_action_copy_ttl_in{}, Packet) ->
  	action_call(copy_ttl_inwards, [Packet]).
  
  action_call(Function, Args) ->
  	{call,0,{remote,0,{atom,0,linc_max_fast_actions},{atom,0,Function}},Args}.
  
  %% linc_max_splicer uses integers if the bit size of the field is 28 bits or
  %% less. The rest of LINC switch always uses binaries and bitstrings.
  