diff options
author | Stanislav Zaikin <zstaseg@gmail.com> | 2020-12-03 19:09:53 +0000 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2020-12-11 23:31:49 +0000 |
commit | 938af5e2710a789da2e7a5eb26ecdedcb68c508e (patch) | |
tree | e30ce54da823ae701a02577403e25f2c1ca198ad | |
parent | b801cd1b31e44e9e90f4619db0cad4ab661019e5 (diff) |
pppoe: fix VLIB_RX into the pppoe-input node
Previously, RX interface for PPPoE packets was set as the original interface.
Now it is set as corresponding PPPoE interface in the "pppoe-input" node.
We need to do it because otherwise IP or other settings won't be working onto the PPPoE interface (only on original rx interface).
Type: fix
Signed-off-by: Stanislav Zaikin <zstaseg@gmail.com>
Change-Id: If9cc37608aa5fe685b8278dd99b819b7eddc6c38
-rw-r--r-- | src/plugins/pppoe/pppoe_decap.c | 3 | ||||
-rw-r--r-- | src/plugins/pppoe/test/test_pppoe.py | 5 | ||||
-rw-r--r-- | src/plugins/pppoe/test/vpp_pppoe_interface.py | 7 |
3 files changed, 15 insertions, 0 deletions
diff --git a/src/plugins/pppoe/pppoe_decap.c b/src/plugins/pppoe/pppoe_decap.c index b2a6e4a396e..71b9874081e 100644 --- a/src/plugins/pppoe/pppoe_decap.c +++ b/src/plugins/pppoe/pppoe_decap.c @@ -181,6 +181,7 @@ VLIB_NODE_FN (pppoe_input_node) (vlib_main_t * vm, sw_if_index0 = t0->sw_if_index; len0 = vlib_buffer_length_in_chain (vm, b0); + vnet_buffer(b0)->sw_if_index[VLIB_RX] = sw_if_index0; pkts_decapsulated ++; stats_n_packets += 1; @@ -274,6 +275,7 @@ VLIB_NODE_FN (pppoe_input_node) (vlib_main_t * vm, sw_if_index1 = t1->sw_if_index; len1 = vlib_buffer_length_in_chain (vm, b1); + vnet_buffer(b1)->sw_if_index[VLIB_RX] = sw_if_index1; pkts_decapsulated ++; stats_n_packets += 1; @@ -398,6 +400,7 @@ VLIB_NODE_FN (pppoe_input_node) (vlib_main_t * vm, sw_if_index0 = t0->sw_if_index; len0 = vlib_buffer_length_in_chain (vm, b0); + vnet_buffer(b0)->sw_if_index[VLIB_RX] = sw_if_index0; pkts_decapsulated ++; stats_n_packets += 1; diff --git a/src/plugins/pppoe/test/test_pppoe.py b/src/plugins/pppoe/test/test_pppoe.py index cce8fe7fc50..99dba01cdc9 100644 --- a/src/plugins/pppoe/test/test_pppoe.py +++ b/src/plugins/pppoe/test/test_pppoe.py @@ -211,6 +211,7 @@ class TestPPPoE(VppTestCase): self.pg0.remote_mac, self.session_id) pppoe_if.add_vpp_config() + pppoe_if.set_unnumbered(self.pg0.sw_if_index) # # Send tunneled packets that match the created tunnel and @@ -274,6 +275,7 @@ class TestPPPoE(VppTestCase): self.pg0.remote_mac, self.session_id) pppoe_if.add_vpp_config() + pppoe_if.set_unnumbered(self.pg0.sw_if_index) # # Send a packet stream that is routed into the session @@ -337,6 +339,7 @@ class TestPPPoE(VppTestCase): self.pg0.remote_mac, self.session_id) pppoe_if.add_vpp_config() + pppoe_if.set_unnumbered(self.pg0.sw_if_index) # # The double create (create the same session twice) should fail, @@ -445,6 +448,7 @@ class TestPPPoE(VppTestCase): self.pg0.remote_mac, self.session_id) pppoe_if1.add_vpp_config() + pppoe_if1.set_unnumbered(self.pg0.sw_if_index) # Send PPPoE Discovery 2 tx3 = self.create_stream_pppoe_discovery(self.pg2, self.pg1, @@ -465,6 +469,7 @@ class TestPPPoE(VppTestCase): self.pg2.remote_mac, self.session_id + 1) pppoe_if2.add_vpp_config() + pppoe_if2.set_unnumbered(self.pg0.sw_if_index) # # Send tunneled packets that match the created tunnel and diff --git a/src/plugins/pppoe/test/vpp_pppoe_interface.py b/src/plugins/pppoe/test/vpp_pppoe_interface.py index 3767aa1d086..505ac4c6425 100644 --- a/src/plugins/pppoe/test/vpp_pppoe_interface.py +++ b/src/plugins/pppoe/test/vpp_pppoe_interface.py @@ -17,6 +17,7 @@ class VppPppoeInterface(VppInterface): self.client_mac = client_mac self.session_id = session_id self.decap_vrf_id = decap_vrf_id + self.vpp_sw_if_index = -1 def add_vpp_config(self): r = self.test.vapi.pppoe_add_del_session( @@ -24,6 +25,7 @@ class VppPppoeInterface(VppInterface): session_id=self.session_id, decap_vrf_id=self.decap_vrf_id) self.set_sw_if_index(r.sw_if_index) + self.vpp_sw_if_index = r.sw_if_index self.generate_remote_hosts() def remove_vpp_config(self): @@ -33,3 +35,8 @@ class VppPppoeInterface(VppInterface): session_id=self.session_id, decap_vrf_id=self.decap_vrf_id, is_add=0) + + def set_unnumbered(self, swif_iface): + self.test.vapi.sw_interface_set_unnumbered( + swif_iface, + self.vpp_sw_if_index) |