aboutsummaryrefslogtreecommitdiffstats
path: root/doc/guides/nics/features/ixgbe.ini
blob: 1d68ee8e2a35c3157836dc2b237ee28ea70ee16b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
;
; Supported features of the 'ixgbe' network poll mode driver.
;
; Refer to default.ini for the full list of available PMD features.
;
[Features]
Speed capabilities   = Y
Link status          = Y
Link status event    = Y
Rx interrupt         = Y
Queue start/stop     = Y
MTU update           = Y
Jumbo frame          = Y
Scattered Rx         = Y
LRO                  = Y
TSO                  = Y
Promiscuous mode     = Y
Allmulticast mode    = Y
Unicast MAC filter   = Y
RSS hash             = Y
RSS key update       = Y
RSS reta update      = Y
VMDq                 = Y
SR-IOV               = Y
DCB                  = Y
VLAN filter          = Y
Ethertype filter     = Y
N-tuple filter       = Y
SYN filter           = Y
Tunnel filter        = Y
Flow director        = Y
Flow control         = Y
Flow API             = Y
Rate limitation      = Y
Traffic mirroring    = Y
Inline crypto        = Y
CRC offload          = Y
VLAN offload         = Y
QinQ offload         = Y
L3 checksum offload  = Y
L4 checksum offload  = Y
MACsec offload       = Y
Inner L3 checksum    = Y
Inner L4 checksum    = Y
Packet type parsing  = Y
Timesync             = Y
Rx descriptor status = Y
Tx descriptor status = Y
Basic stats          = Y
Extended stats       = Y
Stats per queue      = Y
FW version           = Y
EEPROM dump          = Y
Registers dump       = Y
Multiprocess aware   = Y
BSD nic_uio          = Y
Linux UIO            = Y
Linux VFIO           = Y
ARMv8                = Y
x86-32               = Y
x86-64               = Y
s="o">.config_ip4().resolve_arp() except: cls.tearDownClass() raise @classmethod def tearDownClass(cls): super(TestLoopbackInterfaceCRUD, cls).tearDownClass() @staticmethod def create_icmp_stream(src_if, dst_ifs): """ :param VppInterface src_if: Packets are send to this interface, using this interfaces remote host. :param list dst_ifs: IPv4 ICMP requests are send to interfaces addresses. :return: List of generated packets. """ pkts = [] for i in dst_ifs: p = (Ether(dst=src_if.local_mac, src=src_if.remote_mac) / IP(src=src_if.remote_ip4, dst=i.local_ip4) / ICMP(id=i.sw_if_index, type='echo-request')) pkts.append(p) return pkts def verify_icmp(self, capture, request_src_if, dst_ifs): """ :param capture: Capture to verify. :param VppInterface request_src_if: Interface where was send packets. :param list dst_ifs: Interfaces where was generated IPv4 ICMP requests. """ rcvd_icmp_pkts = [] for pkt in capture: try: ip = pkt[IP] icmp = pkt[ICMP] except IndexError: pass else: info = (ip.src, ip.dst, icmp.type, icmp.id) rcvd_icmp_pkts.append(info) for i in dst_ifs: # 0 - icmp echo response info = (i.local_ip4, request_src_if.remote_ip4, 0, i.sw_if_index) self.assertIn(info, rcvd_icmp_pkts) def test_crud(self): # create loopbacks = self.create_loopback_interfaces(20) for i in loopbacks: i.local_ip4_prefix_len = 32 i.config_ip4().admin_up() # read (check sw if dump, ip4 fib, ip6 fib) if_dump = self.vapi.sw_interface_dump(name_filter_valid=True, name_filter='loop') fib4_dump = self.vapi.ip_route_dump(0) for i in loopbacks: self.assertTrue(i.is_interface_config_in_dump(if_dump)) self.assertTrue(i.is_ip4_entry_in_fib_dump(fib4_dump)) if_dump = self.vapi.sw_interface_dump(name_filter_valid=True, name_filter='loopXYZ') self.assertEqual(len(if_dump), 0) # check ping stream = self.create_icmp_stream(self.pg0, loopbacks) self.pg0.add_stream(stream) self.pg_enable_capture(self.pg_interfaces) self.pg_start() capture = self.pg0.get_capture(expected_count=len(stream)) self.verify_icmp(capture, self.pg0, loopbacks) # delete for i in loopbacks: i.remove_vpp_config() # read (check not in sw if dump, ip4 fib, ip6 fib) if_dump = self.vapi.sw_interface_dump() fib4_dump = self.vapi.ip_route_dump(0) for i in loopbacks: self.assertFalse(i.is_interface_config_in_dump(if_dump)) self.assertFalse(i.is_ip4_entry_in_fib_dump(fib4_dump)) # check not ping stream = self.create_icmp_stream(self.pg0, loopbacks) self.pg0.add_stream(stream) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.pg0.assert_nothing_captured() def test_down(self): # create loopbacks = self.create_loopback_interfaces(20) for i in loopbacks: i.local_ip4_prefix_len = 32 i.config_ip4().admin_up() # disable for i in loopbacks: i.admin_down().unconfig_ip4() # read (check not in sw if dump, ip4 fib, ip6 fib) if_dump = self.vapi.sw_interface_dump() fib4_dump = self.vapi.ip_route_dump(0) for i in loopbacks: self.assertTrue(i.is_interface_config_in_dump(if_dump)) self.assertFalse(i.is_ip4_entry_in_fib_dump(fib4_dump)) # check not ping stream = self.create_icmp_stream(self.pg0, loopbacks) self.pg0.add_stream(stream) self.pg_enable_capture(self.pg_interfaces) self.pg_start() self.pg0.assert_nothing_captured() class TestInterfaceDumpApiLocalOnly(VppTestCase): """test_interface_crud.TestInterfaceDumpApiLocalOnly""" def test_sw_if_index_0(self): rv = self.vapi.sw_interface_dump(sw_if_index=0) self.assertEqual(rv[0].sw_if_index, 0) def test_sw_if_index_twiddle0(self): rv = self.vapi.sw_interface_dump(sw_if_index=0xffffffff) self.assertEqual(rv[0].sw_if_index, 0) def test_sw_if_index_1_not_existing(self): rv = self.vapi.sw_interface_dump(sw_if_index=1) self.assertEqual(len(rv), 0, 'expected no records.') class TestInterfaceDumpApi(VppTestCase): """test_interface_crud.TestInterfaceDumpApi""" def test_sw_if_index_1(self): self.vapi.create_loopback_instance(is_specified=1, user_instance=10) self.vapi.create_loopback_instance(is_specified=1, user_instance=5) # Can I get back the specified record? rv = self.vapi.sw_interface_dump(sw_if_index=1) self.assertEqual(rv[0].sw_if_index, 1, rv) # verify 3 interfaces rv = self.vapi.sw_interface_dump(sw_if_index=0xffffffff) self.assertEqual(len(rv), 3, 'Expected 3 interfaces.') if __name__ == '__main__': unittest.main(testRunner=VppTestRunner)