pppoe: fix VLIB_RX into the pppoe-input node 61/30261/5
authorStanislav Zaikin <zstaseg@gmail.com>
Thu, 3 Dec 2020 19:09:53 +0000 (19:09 +0000)
committerDamjan Marion <dmarion@me.com>
Fri, 11 Dec 2020 23:31:49 +0000 (23:31 +0000)
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

src/plugins/pppoe/pppoe_decap.c
src/plugins/pppoe/test/test_pppoe.py
src/plugins/pppoe/test/vpp_pppoe_interface.py

index b2a6e4a..71b9874 100644 (file)
@@ -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;
index cce8fe7..99dba01 100644 (file)
@@ -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
index 3767aa1..505ac4c 100644 (file)
@@ -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)