- hdr1 = vlib_buffer_get_current (b1);
- if (node_type == NSH_INPUT_TYPE)
- {
- nsp_nsi1 = hdr1->nsp_nsi;
- header_len1 = (hdr1->length & NSH_LEN_MASK) * 4;
- ttl1 = (hdr1->ver_o_c & NSH_TTL_H4_MASK) << 2 |
- (hdr1->length & NSH_TTL_L2_MASK) >> 6;
- ttl1 = ttl1 - 1;
- if (PREDICT_FALSE (ttl1 == 0))
- {
- error1 = NSH_NODE_ERROR_INVALID_TTL;
- goto trace1;
- }
- }
- else if (node_type == NSH_CLASSIFIER_TYPE)
- {
- nsp_nsi1 =
- clib_host_to_net_u32 (vnet_buffer (b1)->
- l2_classify.opaque_index);
- }
- else if (node_type == NSH_AWARE_VNF_PROXY_TYPE)
- {
- /* Push dummy Eth header */
- memset (&dummy_eth1.dst_address[0], 0x11223344, 4);
- memset (&dummy_eth1.dst_address[4], 0x5566, 2);
- memset (&dummy_eth1.src_address[0], 0x778899aa, 4);
- memset (&dummy_eth1.src_address[4], 0xbbcc, 2);
- dummy_eth1.type = 0x0800;
- vlib_buffer_advance (b1, -(word) sizeof (ethernet_header_t));
- hdr1 = vlib_buffer_get_current (b1);
- clib_memcpy (hdr1, &dummy_eth1,
- (word) sizeof (ethernet_header_t));
-
- sw_if_index1 = vnet_buffer (b1)->sw_if_index[VLIB_TX];
- nsp_nsi1 = nm->tunnel_index_by_sw_if_index[sw_if_index1];
- }
- else
- {
- memset (&key1, 0, sizeof (key1));
- key1.transport_type = NSH_NODE_NEXT_ENCAP_VXLAN4;
- key1.transport_index = vnet_buffer (b1)->sw_if_index[VLIB_RX];
-
- p1 = hash_get_mem (nm->nsh_proxy_session_by_key, &key1);
- if (PREDICT_FALSE (p1 == 0))
- {
- error1 = NSH_NODE_ERROR_NO_PROXY;
- goto trace1;
- }
-
- proxy1 = pool_elt_at_index (nm->nsh_proxy_sessions, p1[0]);
- if (PREDICT_FALSE (proxy1 == 0))
- {
- error1 = NSH_NODE_ERROR_NO_PROXY;
- goto trace1;
- }
- nsp_nsi1 = proxy1->nsp_nsi;
- }
-
- /* Process packet 0 */