aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Gelety <jgelety@cisco.com>2020-03-11 02:56:30 +0100
committerJan Gelety <jgelety@cisco.com>2020-03-16 14:35:21 +0000
commitac683d233f60d0235a6a581bd985cd225568d8e0 (patch)
tree10b24549a006d2535edb0c880320c114d4f7de67
parentcecee58d9187f9e444ccc704a1614dcc58f84809 (diff)
CSIT-1597 API cleanup: vxlan
- cover API changes in VPP: https://gerrit.fd.io/r/c/vpp/+/25569 - update vpp stable to version 20.05-rc0~345 - some pylint fixies in Policer.py Change-Id: Iba2c877d0e74526c69826c5ec4afd64ed2055d31 Signed-off-by: Jan Gelety <jgelety@cisco.com>
-rw-r--r--VPP_STABLE_VER_CENTOS2
-rw-r--r--VPP_STABLE_VER_UBUNTU_BIONIC2
-rw-r--r--resources/api/vpp/supported_crcs.yaml251
-rw-r--r--resources/libraries/python/InterfaceUtil.py34
-rw-r--r--resources/libraries/python/Policer.py4
5 files changed, 19 insertions, 274 deletions
diff --git a/VPP_STABLE_VER_CENTOS b/VPP_STABLE_VER_CENTOS
index 647fe4a4e4..d109aef81b 100644
--- a/VPP_STABLE_VER_CENTOS
+++ b/VPP_STABLE_VER_CENTOS
@@ -1 +1 @@
-20.05-rc0~327-gcd01fb4~b9048
+20.05-rc0~345_g7c0eb56~b9066
diff --git a/VPP_STABLE_VER_UBUNTU_BIONIC b/VPP_STABLE_VER_UBUNTU_BIONIC
index c03a6beb68..5ab42edfd7 100644
--- a/VPP_STABLE_VER_UBUNTU_BIONIC
+++ b/VPP_STABLE_VER_UBUNTU_BIONIC
@@ -1 +1 @@
-20.05-rc0~327-gcd01fb423
+20.05-rc0~345-g7c0eb56f4
diff --git a/resources/api/vpp/supported_crcs.yaml b/resources/api/vpp/supported_crcs.yaml
index 34d57f47cf..0cd73d4f7b 100644
--- a/resources/api/vpp/supported_crcs.yaml
+++ b/resources/api/vpp/supported_crcs.yaml
@@ -30,255 +30,8 @@
# Use bash command "env LC_COLLATE=C sort -u" if not clear.
# https://logs.fd.io/production/vex-yul-rot-jenkins-1
-# /vpp-merge-master-ubuntu1804/823/
-20.01-rc0~327:
- acl_add_replace: '0x13bc8539' # dev
- acl_add_replace_reply: '0xac407b0c' # dev
- acl_details: '0xf89d7a88' # perf teardown
- acl_dump: '0xef34fea4' # perf teardown
- acl_interface_list_details: '0xd5e80809' # perf teardown
- acl_interface_list_dump: '0x529cb13f' # perf teardown
- acl_interface_set_acl_list: '0x8baece38' # perf
- acl_interface_set_acl_list_reply: '0xe8d4e804' # perf
- # 6x^ tc01-64B-1c-ethip4udp-ip4base-iacl1sf-10kflows-mrr
- # tc01-64B-1c-ethip4udp-ip4base-iacl1sl-10kflows-mrr
- # ^^ ip4fwdANDiaclANDacl10AND100_flows
- avf_create: '0xdaab8ae2' # dev
- avf_create_reply: '0x5383d31f' # dev
- bond_create: '0x48883c7e' # perf
- bond_create_reply: '0x5383d31f' # perf
- bond_enslave: '0x076ecfa7' # perf
- bond_enslave_reply: '0xe8d4e804' # perf
- # 4x^ tc01-64B-1c-1lbvpplacp-dot1q-l2xcbase-eth-2vhostvr1024-1vm-mrr
- # ^ l2xcfwdANDlbond_1lANDnf_testpmd
- bridge_domain_add_del: '0x600b7170' # dev
- bridge_domain_add_del_reply: '0xe8d4e804' # dev
- # bridge_domain_dump / details # honeycomb
- classify_add_del_session: '0xf20879f0' # dev
- classify_add_del_session_reply: '0xe8d4e804' # dev
- classify_add_del_table: '0x6849e39e' # dev
- classify_add_del_table_reply: '0x05486349' # dev
- # classify_session_dump / details # honeycomb
- # classify_table_by_interface / reply # honeycomb
- # classify_table_info / reply # honeycomb
- cli_inband: '0xf8377302' # dev setup
- cli_inband_reply: '0x05879051' # dev setup
- cop_interface_enable_disable: '0x5501adee' # dev
- cop_interface_enable_disable_reply: '0xe8d4e804' # dev
- cop_whitelist_enable_disable: '0xdebe13ea' # dev
- cop_whitelist_enable_disable_reply: '0xe8d4e804' # dev
- create_loopback: '0x42bb5d22' # dev
- create_loopback_reply: '0x5383d31f' # dev
- create_subif: '0xcb371063' # perf
- create_subif_reply: '0x5383d31f' # perf
- # ^^ tc01-64B-1c-dot1ad-l2xcbase-mrr
- # ^ 3n: dot1adANDl2xcfwd
- create_vhost_user_if: '0x591ee951' # dev
- create_vhost_user_if_reply: '0x5383d31f' # dev
- create_vlan_subif: '0xaf34ac8b' # dev
- create_vlan_subif_reply: '0x5383d31f' # dev
- # dhcp_proxy_dump / details # honeycomb
- gbp_bridge_domain_add: '0x8454bfdf' # dev
- gbp_bridge_domain_add_reply: '0xe8d4e804' # dev
- gbp_contract_add_del: '0x553e275b' # dev
- gbp_contract_add_del_reply: '0x1992deab' # dev
- gbp_endpoint_add: '0x9ce16d5a' # dev
- gbp_endpoint_add_reply: '0x1dd3ff3e' # dev
- gbp_endpoint_group_add: '0x8e0f4054' # dev
- gbp_endpoint_group_add_reply: '0xe8d4e804' # dev
- gbp_ext_itf_add_del: '0x12ed5700' # dev
- gbp_ext_itf_add_del_reply: '0xe8d4e804' # dev
- gbp_route_domain_add: '0x2d0afe38' # dev
- gbp_route_domain_add_reply: '0xe8d4e804' # dev
- gbp_subnet_add_del: '0x888aca35' # dev
- gbp_subnet_add_del_reply: '0xe8d4e804' # dev
- gpe_enable_disable: '0xeb0e943b' # dev
- gpe_enable_disable_reply: '0xe8d4e804' # dev
- # gre_tunnel_add_del / reply # unused L1 keyword: create_gre_tunnel_interface
- hw_interface_set_mtu: '0xe6746899' # dev
- hw_interface_set_mtu_reply: '0xe8d4e804' # dev
- input_acl_set_interface: '0xde7ad708' # dev
- input_acl_set_interface_reply: '0xe8d4e804' # dev
- ip_address_details: '0xb1199745' # dev
- ip_address_dump: '0x2d033de4' # dev
- ip_neighbor_add_del: '0x105518b6' # dev
- ip_neighbor_add_del_reply: '0x1992deab' # dev
- # ip_probe_neighbor / reply # unused L1 keyword vpp_ip_probe
- ip_route_add_del: '0xc1ff832d' # dev
- ip_route_add_del_reply: '0x1992deab' # dev
- # ip_source_check_interface_add_del / reply # unused L1 keyword vpp_ip_source_check_setup
- ip_table_add_del: '0x0ffdaec0' # dev
- ip_table_add_del_reply: '0xe8d4e804' # dev
- ipsec_interface_add_del_spd: '0x80f80cbb' # dev
- ipsec_interface_add_del_spd_reply: '0xe8d4e804' # dev
- ipsec_sad_entry_add_del: '0x57cc13fa' # dev
- ipsec_sad_entry_add_del_reply: '0x9ffac24b' # dev
- ipsec_select_backend: '0x5bcfd3b7' # perf
- ipsec_select_backend_reply: '0xe8d4e804' # perf
- # ^^ tc01-64B-1c-ethip4ipsec1tnlsw-ip4base-int-aes256gcm-mrr
- # ^ nic_intel-xl710ANDipsechwANDipsecintANDtnl_1ANDaes_256_gcm
- ipsec_spd_add_del: '0x20e89a95' # dev
- ipsec_spd_add_del_reply: '0xe8d4e804' # dev
- ipsec_spd_entry_add_del: '0x9f384b8d' # dev
- ipsec_spd_entry_add_del_reply: '0x9ffac24b' # dev
- ipsec_tunnel_if_add_del: '0x2b135e68' # perf
- ipsec_tunnel_if_add_del_reply: '0x5383d31f' # perf
- # ^^ tc01-64B-1c-ethip4ipsec1tnlhw-ip4base-int-aes256gcm-mrr
- # ^ See select_backend.
- # l2_fib_table_dump / details # honeycomb
- l2_interface_vlan_tag_rewrite: '0x62cc0bbc' # dev
- l2_interface_vlan_tag_rewrite_reply: '0xe8d4e804' # dev
- l2_patch_add_del: '0x522f3445' # dev
- l2_patch_add_del_reply: '0xe8d4e804' # dev
- # l2fib_add_del / reply # unused L1 keyword: vpp_add_l2fib_entry
- lb_conf: '0x22ddb739' # perf
- lb_conf_reply: '0xe8d4e804' # perf
- lb_add_del_vip: '0xd15b7ddc' # perf
- lb_add_del_vip_reply: '0xe8d4e804' # perf
- lb_add_del_as: '0x78628987' # perf
- lb_add_del_as_reply: '0xe8d4e804' # perf
- lb_add_del_intf_nat4: '0x47d6e753' # perf
- lb_add_del_intf_nat4_reply: '0xe8d4e804' # perf
- # 8x^ tc01-64B-1c-ethip4-loadbalancer-nat4
- # ^ 2n: loadbalancer_nat4
- lisp_add_del_adjacency: '0xf047390d' # dev
- lisp_add_del_adjacency_reply: '0xe8d4e804' # dev
- lisp_add_del_local_eid: '0xe6d00717' # dev
- lisp_add_del_local_eid_reply: '0xe8d4e804' # dev
- lisp_add_del_locator: '0x006a4240' # dev
- lisp_add_del_locator_reply: '0xe8d4e804' # dev
- lisp_add_del_locator_set: '0x06968e38' # dev
- lisp_add_del_locator_set_reply: '0xb6666db4' # dev
- # lisp_add_del_map_resolver / reply # unused L2 keyword: Configure LISP map resolver address
- lisp_add_del_remote_mapping: '0xb879c3a9' # dev
- lisp_add_del_remote_mapping_reply: '0xe8d4e804' # dev
- lisp_eid_table_add_del_map: '0x59e9975e' # perf
- lisp_eid_table_add_del_map_reply: '0xe8d4e804' # perf
- # ^^ tc01-64B-1c-ethip4ipsectptlispgpe-ip4base-aes128cbc-hmac256sha-ndrpdr # currently failing before calls
- # ^ ipsecANDlispgpe
- # lisp_eid_table_dump / details # unused L2 keyword: LISP eid address should be set correctly to eid table
- lisp_enable_disable: '0xeb0e943b' # dev
- lisp_enable_disable_reply: '0xe8d4e804' # dev
- # lisp_locator_set_dump / details # unused L2 keyword: LISP locator_set shpuld be configured correctly
- # lisp_map_server_dump / details # honeycomb
- # lisp_map_resolver_dump / details # unused L2 keyword: LISP map resolver address should be configured correctly
- macip_acl_add: '0x0c680ca5' # perf
- macip_acl_add_reply: '0xac407b0c' # perf
- macip_acl_details: '0xe164e69a' # perf teardown
- macip_acl_dump: '0xef34fea4' # perf teardown
- macip_acl_interface_add_del: '0x6a6be97c' # perf
- macip_acl_interface_add_del_reply: '0xe8d4e804' # perf
- macip_acl_interface_get: '0x51077d14' # perf teardown
- macip_acl_interface_get_reply: '0xaccf9b05' # perf teardown
- # 8x^ tc01-64B-1c-eth-l2bdbasemaclrn-macip-iacl1sl-100flows-mrr
- # ^ macipANDacl1AND100_flows
- memif_create: '0xb1b25061' # dev
- memif_create_reply: '0x5383d31f' # dev
- memif_details: '0xd0382c4c' # dev
- memif_dump: '0x51077d14' # dev
- memif_socket_filename_add_del: '0xa2ce1a10' # dev
- memif_socket_filename_add_del_reply: '0xe8d4e804' # dev
- nat44_interface_add_del_feature: '0xf3699b83' # perf
- nat44_interface_add_del_feature_reply: '0xe8d4e804' # perf
- nat_det_add_del_map: '0x112fde05' # perf
- nat_det_add_del_map_reply: '0xe8d4e804' # perf
- nat_show_config: '0x51077d14' # perf teardown
- nat_show_config_reply: '0x006a0786' # perf teardown
- # 6x^ tc01-64B-1c-ethip4udp-ip4base-nat44-mrr
- # ^ nat44NOTscaleNOTsrc_user_1
- nsim_configure: '0x16ed400f' # perf
- nsim_configure_reply: '0xe8d4e804' # perf
- nsim_output_feature_enable_disable: '0x3865946c' # perf
- nsim_output_feature_enable_disable_reply: '0xe8d4e804' # perf
- # 4x^ tc01-9000B-1c-eth-ip4tcp-nsim-ldpreload-iperf3-bps
- # ^ 3n: nsimAND1stream
- policer_add_del: '0xcb948f6e' # dev
- policer_add_del_reply: '0xa177cef2' # dev
- policer_classify_set_interface: '0xde7ad708' # dev
- policer_classify_set_interface_reply: '0xe8d4e804' # dev
- # 4x^ tc01-64B-ethip4-ip4base-ipolicemarkbase-dev
- rdma_create: '0x076fe418' # perf
- rdma_create_reply: '0x5383d31f' # perf
- # 2x^ Any test with drv_rdma. Currently only available on 2n-clx.
- # - Not testable by devicetest (until we have environment with right NICs).
- # show_lisp_map_register_state / reply # honeycomb
- # show_lisp_map_request_mode / reply # honeycomb
- # show_lisp_pitr / reply # honeycomb
- # show_lisp_rloc_probe_state / reply # honeycomb
- # show_lisp_status / reply # unused L2 keywords: LISP should be enabled / disabled
- # show_lisp_use_petr / reply # honeycomb
- show_threads: '0x51077d14' # dev
- show_threads_reply: '0xf5e0b66f' # dev
- show_version: '0x51077d14' # dev setup
- show_version_reply: '0xc919bde1' # dev setup
- sr_localsid_add_del: '0xb30489eb' # perf
- sr_localsid_add_del_reply: '0xe8d4e804' # perf
- sr_localsids_details: '0x0791babc' # perf teardown
- sr_localsids_dump: '0x51077d14' # perf teardown
- sr_policies_details: '0x5087f460' # perf teardown
- sr_policies_dump: '0x51077d14' # perf teardown
- sr_policy_add: '0x4b6e2484' # perf
- sr_policy_add_reply: '0xe8d4e804' # perf
- sr_set_encap_source: '0xd05bb4de' # perf
- sr_set_encap_source_reply: '0xe8d4e804' # perf
- sr_steering_add_del: '0x28b5dcab' # perf
- sr_steering_add_del_reply: '0xe8d4e804' # perf
- sr_steering_pol_details: '0x5627d483' # perf teardown
- sr_steering_pol_dump: '0x51077d14' # perf teardown
- # 14x^ tc01-78B-1c-ethip6ip6-ip6base-srv6enc1sid-mrr
- # ^ srv6_1sid
- sw_interface_add_del_address: '0x5803d5c4' # dev
- sw_interface_add_del_address_reply: '0xe8d4e804' # dev
- sw_interface_bond_details: '0xf5ef2106' # perf
- sw_interface_bond_dump: '0x51077d14' # perf
- # ^^ see bond_*
- sw_interface_details: '0x17b69fa2' # dev setup
- sw_interface_dump: '0xaa610c27' # dev setup
- # sw_interface_get_table / reply # honeycomb
- sw_interface_ip6nd_ra_config: '0x3eb00b1c' # dev
- sw_interface_ip6nd_ra_config_reply: '0xe8d4e804' # dev
- sw_interface_rx_placement_details: '0xf6d7d024' # perf
- sw_interface_rx_placement_dump: '0xf9e6675e' # perf
- # ^^ tc01-64B-1c-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-mrr
- # ^ dot1qANDl2bdmaclrnANDbaseANDmemif
- sw_interface_set_flags: '0x6a2b491a' # dev
- sw_interface_set_flags_reply: '0xe8d4e804' # dev
- sw_interface_set_l2_bridge: '0x2e483cd0' # dev
- sw_interface_set_l2_bridge_reply: '0xe8d4e804' # dev
- sw_interface_set_l2_xconnect: '0x1aaa2dbb' # dev
- sw_interface_set_l2_xconnect_reply: '0xe8d4e804' # dev
- sw_interface_set_mac_address: '0x6aca746a' # perf
- sw_interface_set_mac_address_reply: '0xe8d4e804' # perf
- sw_interface_set_rx_placement: '0xdb65f3c9' # perf
- sw_interface_set_rx_placement_reply: '0xe8d4e804' # perf
- # ^^ see tc01-64B-1c-dot1q-l2bdbasemaclrn-eth-2memif-1dcr-mrr above
- sw_interface_set_table: '0xdf42a577' # dev
- sw_interface_set_table_reply: '0xe8d4e804' # dev
- sw_interface_set_unnumbered: '0x938ef33b' # perf
- sw_interface_set_unnumbered_reply: '0xe8d4e804' # perf
- # ^^ see ipsec_tunnel_if_add_del
- sw_interface_set_vxlan_bypass: '0xe74ca095' # dev
- sw_interface_set_vxlan_bypass_reply: '0xe8d4e804' # dev
- sw_interface_slave_details: '0x3c4a0e23' # perf
- sw_interface_slave_dump: '0xf9e6675e' # perf
- # ^^ see bond_*
- # sw_interface_span_dump / details # honeycomb
- sw_interface_tap_v2_dump: '0xf9e6675e' # dev
- sw_interface_tap_v2_details: '0xe53c16de' # dev
- sw_interface_vhost_user_details: '0x98530df1' # dev
- sw_interface_vhost_user_dump: '0xf9e6675e' # dev
- tap_create_v2: '0x445835fd' # dev
- tap_create_v2_reply: '0x5383d31f' # dev
- vxlan_add_del_tunnel: '0x00f4bdd0' # dev
- vxlan_add_del_tunnel_reply: '0xfda5941f' # dev
- # vxlan_gpe_tunnel_dump / details # honeycomb
- # vxlan_tunnel_dump /details # unused L2 keyword: Get VXLAN dump
-# Please keep alphabetic order.
-# Use bash command "env LC_COLLATE=C sort -u" if not clear.
-
-
-# https://gerrit.fd.io/r/c/vpp/+/25569
-25569/4:
+# /vpp-merge-master-ubuntu1804/841/
+20.01-rc0~345:
acl_add_replace: '0x13bc8539' # dev
acl_add_replace_reply: '0xac407b0c' # dev
acl_details: '0xf89d7a88' # perf teardown
diff --git a/resources/libraries/python/InterfaceUtil.py b/resources/libraries/python/InterfaceUtil.py
index b6647ef32a..144a96cca5 100644
--- a/resources/libraries/python/InterfaceUtil.py
+++ b/resources/libraries/python/InterfaceUtil.py
@@ -20,8 +20,8 @@ from ipaddress import ip_address
from robot.api import logger
from resources.libraries.python.Constants import Constants
-from resources.libraries.python.CpuUtils import CpuUtils
from resources.libraries.python.DUTSetup import DUTSetup
+from resources.libraries.python.IPAddress import IPAddress
from resources.libraries.python.L2Util import L2Util
from resources.libraries.python.PapiExecutor import PapiSocketExecutor
from resources.libraries.python.parsers.JsonParser import JsonParser
@@ -791,16 +791,16 @@ class InterfaceUtil:
:raises RuntimeError: if it is unable to create VxLAN interface on the
node.
"""
- src_address = ip_address(source_ip)
- dst_address = ip_address(destination_ip)
-
cmd = u"vxlan_add_del_tunnel"
args = dict(
- is_add=1,
- is_ipv6=1 if src_address.version == 6 else 0,
+ is_add=True,
instance=Constants.BITWISE_NON_ZERO,
- src_address=src_address.packed,
- dst_address=dst_address.packed,
+ src_address=IPAddress.create_ip_address_object(
+ ip_address(source_ip)
+ ),
+ dst_address=IPAddress.create_ip_address_object(
+ ip_address(destination_ip)
+ ),
mcast_sw_if_index=Constants.BITWISE_NON_ZERO,
encap_vrf_id=0,
decap_next_index=Constants.BITWISE_NON_ZERO,
@@ -838,9 +838,9 @@ class InterfaceUtil:
cmd = u"sw_interface_set_vxlan_bypass"
args = dict(
- is_ipv6=0,
+ is_ipv6=False,
sw_if_index=sw_if_index,
- enable=1
+ enable=True
)
err_msg = f"Failed to set VXLAN bypass on interface " \
f"on host {node[u'host']}"
@@ -870,16 +870,8 @@ class InterfaceUtil:
:returns: Processed vxlan interface dump.
:rtype: dict
"""
- if vxlan_dump[u"is_ipv6"]:
- vxlan_dump[u"src_address"] = \
- ip_address(vxlan_dump[u"src_address"])
- vxlan_dump[u"dst_address"] = \
- ip_address(vxlan_dump[u"dst_address"])
- else:
- vxlan_dump[u"src_address"] = \
- ip_address(vxlan_dump[u"src_address"][0:4])
- vxlan_dump[u"dst_address"] = \
- ip_address(vxlan_dump[u"dst_address"][0:4])
+ vxlan_dump[u"src_address"] = str(vxlan_dump[u"src_address"])
+ vxlan_dump[u"dst_address"] = str(vxlan_dump[u"dst_address"])
return vxlan_dump
if interface is not None:
@@ -1200,7 +1192,7 @@ class InterfaceUtil:
rxq_num=int(num_rx_queues) if num_rx_queues else 0,
rxq_size=rxq_size,
txq_size=txq_size,
- mode=getattr(RdmaMode,f"RDMA_API_MODE_{mode.upper()}").value,
+ mode=getattr(RdmaMode, f"RDMA_API_MODE_{mode.upper()}").value,
)
err_msg = f"Failed to create RDMA interface on host {node[u'host']}"
with PapiSocketExecutor(node) as papi_exec:
diff --git a/resources/libraries/python/Policer.py b/resources/libraries/python/Policer.py
index abf6090cf3..af2321bae9 100644
--- a/resources/libraries/python/Policer.py
+++ b/resources/libraries/python/Policer.py
@@ -165,8 +165,8 @@ class Policer:
).value,
type=getattr(PolicerType, f"TYPE_{policer_type.upper()}").value,
conform_action=conform_action,
- exceed_action = exceed_action,
- violate_action = violate_action,
+ exceed_action=exceed_action,
+ violate_action=violate_action,
color_aware=bool(color_aware == u"'ca'")
)
err_msg = f"Failed to configure policer {policer_name} " \
sp_dpo_get(mddi0); mdd1 = mpls_disp_dpo_get(mddi1); if (payload_is_ip4) { /* * decrement the TTL on ingress to the LSP */ } else if (payload_is_ip6) { /* * decrement the TTL on ingress to the LSP */ } next0 = mdd0->mdd_dpo.dpoi_next_node; next1 = mdd1->mdd_dpo.dpoi_next_node; vnet_buffer(b0)->ip.adj_index[VLIB_TX] = mdd0->mdd_dpo.dpoi_index; vnet_buffer(b1)->ip.adj_index[VLIB_TX] = mdd1->mdd_dpo.dpoi_index; vnet_buffer(b0)->ip.rpf_id = mdd0->mdd_rpf_id; vnet_buffer(b1)->ip.rpf_id = mdd1->mdd_rpf_id; if (PREDICT_FALSE(b0->flags & VLIB_BUFFER_IS_TRACED)) { mpls_label_disposition_trace_t *tr = vlib_add_trace (vm, node, b0, sizeof (*tr)); tr->mdd = mddi0; } if (PREDICT_FALSE(b1->flags & VLIB_BUFFER_IS_TRACED)) { mpls_label_disposition_trace_t *tr = vlib_add_trace (vm, node, b1, sizeof (*tr)); tr->mdd = mddi1; } vlib_validate_buffer_enqueue_x2(vm, node, next_index, to_next, n_left_to_next, bi0, bi1, next0, next1); } while (n_left_from > 0 && n_left_to_next > 0) { mpls_disp_dpo_t *mdd0; vlib_buffer_t * b0; u32 bi0, mddi0; u32 next0; bi0 = from[0]; to_next[0] = bi0; from += 1; to_next += 1; n_left_from -= 1; n_left_to_next -= 1; b0 = vlib_get_buffer (vm, bi0); /* dst lookup was done by ip4 lookup */ mddi0 = vnet_buffer(b0)->ip.adj_index[VLIB_TX]; mdd0 = mpls_disp_dpo_get(mddi0); if (payload_is_ip4) { /* * decrement the TTL on ingress to the LSP */ } else if (payload_is_ip6) { /* * decrement the TTL on ingress to the LSP */ } else { } next0 = mdd0->mdd_dpo.dpoi_next_node; vnet_buffer(b0)->ip.adj_index[VLIB_TX] = mdd0->mdd_dpo.dpoi_index; vnet_buffer(b0)->ip.rpf_id = mdd0->mdd_rpf_id; if (PREDICT_FALSE(b0->flags & VLIB_BUFFER_IS_TRACED)) { mpls_label_disposition_trace_t *tr = vlib_add_trace (vm, node, b0, sizeof (*tr)); tr->mdd = mddi0; } vlib_validate_buffer_enqueue_x1(vm, node, next_index, to_next, n_left_to_next, bi0, next0); } vlib_put_next_frame (vm, node, next_index, n_left_to_next); } return from_frame->n_vectors; } static u8 * format_mpls_label_disposition_trace (u8 * s, va_list * args) { CLIB_UNUSED (vlib_main_t * vm) = va_arg (*args, vlib_main_t *); CLIB_UNUSED (vlib_node_t * node) = va_arg (*args, vlib_node_t *); CLIB_UNUSED (mpls_label_disposition_trace_t * t); t = va_arg (*args, mpls_label_disposition_trace_t *); s = format(s, "disp:%d", t->mdd); return (s); } static uword ip4_mpls_label_disposition (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { return (mpls_label_disposition_inline(vm, node, frame, 1, 0)); } VLIB_REGISTER_NODE (ip4_mpls_label_disposition_node) = { .function = ip4_mpls_label_disposition, .name = "ip4-mpls-label-disposition", .vector_size = sizeof (u32), .format_trace = format_mpls_label_disposition_trace, .n_next_nodes = 1, .next_nodes = { [0] = "ip4-drop", } }; VLIB_NODE_FUNCTION_MULTIARCH (ip4_mpls_label_disposition_node, ip4_mpls_label_disposition) static uword ip6_mpls_label_disposition (vlib_main_t * vm, vlib_node_runtime_t * node, vlib_frame_t * frame) { return (mpls_label_disposition_inline(vm, node, frame, 0, 1)); } VLIB_REGISTER_NODE (ip6_mpls_label_disposition_node) = { .function = ip6_mpls_label_disposition, .name = "ip6-mpls-label-disposition", .vector_size = sizeof (u32), .format_trace = format_mpls_label_disposition_trace, .n_next_nodes = 1, .next_nodes = { [0] = "ip6-drop", } }; VLIB_NODE_FUNCTION_MULTIARCH (ip6_mpls_label_disposition_node, ip6_mpls_label_disposition) static void mpls_disp_dpo_mem_show (void) { fib_show_memory_usage("MPLS label", pool_elts(mpls_disp_dpo_pool), pool_len(mpls_disp_dpo_pool), sizeof(mpls_disp_dpo_t)); } const static dpo_vft_t mdd_vft = { .dv_lock = mpls_disp_dpo_lock, .dv_unlock = mpls_disp_dpo_unlock, .dv_format = format_mpls_disp_dpo, .dv_mem_show = mpls_disp_dpo_mem_show, }; const static char* const mpls_label_disp_ip4_nodes[] = { "ip4-mpls-label-disposition", NULL, }; const static char* const mpls_label_disp_ip6_nodes[] = { "ip6-mpls-label-disposition", NULL, }; const static char* const * const mpls_label_disp_nodes[DPO_PROTO_NUM] = { [DPO_PROTO_IP4] = mpls_label_disp_ip4_nodes, [DPO_PROTO_IP6] = mpls_label_disp_ip6_nodes, }; void mpls_disp_dpo_module_init (void) { dpo_register(DPO_MPLS_DISPOSITION, &mdd_vft, mpls_label_disp_nodes); }