+ def add_dot1q_layer(self, packet, vlan):
+ return self._add_tag(packet, vlan, self.DOT1Q_TYPE)
+
+ def add_dot1ad_layer(self, packet, outer, inner):
+ p = self._add_tag(packet, inner, self.DOT1Q_TYPE)
+ return self._add_tag(p, outer, self.DOT1AD_TYPE)
+
+ def remove_dot1q_layer(self, packet, vlan=None):
+ return self._remove_tag(packet, vlan, self.DOT1Q_TYPE)
+
+ def remove_dot1ad_layer(self, packet, outer=None, inner=None):
+ p = self._remove_tag(packet, outer, self.DOT1AD_TYPE)
+ return self._remove_tag(p, inner, self.DOT1Q_TYPE)
+
+ def set_vtr(self, vtr, push1q=0, tag=None, inner=None, outer=None):
+ self._tag1 = 0
+ self._tag2 = 0
+ self._push1q = 0
+
+ if (
+ vtr == L2_VTR_OP.L2_PUSH_1
+ or vtr == L2_VTR_OP.L2_TRANSLATE_1_1
+ or vtr == L2_VTR_OP.L2_TRANSLATE_2_1
+ ):
+ self._tag1 = tag
+ self._push1q = push1q
+ if (
+ vtr == L2_VTR_OP.L2_PUSH_2
+ or vtr == L2_VTR_OP.L2_TRANSLATE_1_2
+ or vtr == L2_VTR_OP.L2_TRANSLATE_2_2
+ ):
+ self._tag1 = outer
+ self._tag2 = inner
+ self._push1q = push1q
+
+ self.test.vapi.l2_interface_vlan_tag_rewrite(
+ sw_if_index=self.sw_if_index,
+ vtr_op=vtr,
+ push_dot1q=self._push1q,
+ tag1=self._tag1,
+ tag2=self._tag2,
+ )
+ self._vtr = vtr
+
+
+class VppDot1QSubint(VppSubInterface):