};
struct pkt_params test_pkts[] = {
- {"ARP", 1, IPPROTO_UDP, 255, 5, 0, ZERO},
- {"VLAN ARP", 1, IPPROTO_UDP, 255, 5, DPF_VLAN, ZERO},
+ {"ARP req", 1, IPPROTO_UDP, 255, 5, 0, ZERO},
+ {"VLAN ARP req", 1, IPPROTO_UDP, 255, 5, DPF_VLAN, ZERO},
{"ipv4 TCP ttl 255", 4, IPPROTO_TCP, 255, 5, 0, STF},
{"ipv4 TCP ttl 246", 4, IPPROTO_TCP, 246, 5, 0, STF},
{"ipv4 TCP ttl 245", 4, IPPROTO_TCP, 245, 5, 0, ZERO},
(promisc ? CMD_PFILTER_PROMISCUOUS : 0) |
(allmulti ? CMD_PFILTER_ALL_MULTICAST : 0);
-#define TREX_PATCH
-#ifdef TREX_PATCH
- err = vnic_dev_cmd(vdev, CMD_PACKET_FILTER_ALL, &a0, &a1, wait);
-#else
err = vnic_dev_cmd(vdev, CMD_PACKET_FILTER, &a0, &a1, wait);
-#endif
+
if (err)
pr_err("Can't set packet filter\n");
memset(ð_mask, 0, sizeof(eth_mask));
memset(ð_val, 0, sizeof(eth_val));
- eth_val.ether_type = 0x0806;
+ eth_val.ether_type = 0xdead;
eth_mask.ether_type = 0;
gp->position = 0;
/* The entry is present in the table */
key = enic->fdir.nodes[pos];
-#ifdef TREX_PATCH
- switch (params->soft_id) {
- case 100:
- // remove promisc when we delete 'receive all' filter
- vnic_dev_packet_filter(enic->vdev, 1, 1, 1, 0, 1);
- break;
- }
-#endif
/* Delete the filter */
vnic_dev_classifier(enic->vdev, CLSF_DEL,
&key->fltr_id, NULL);
#ifdef TREX_PATCH
switch (params->soft_id) {
case 100:
- vnic_dev_packet_filter(enic->vdev, 1, 1, 1, 1, 1);
copy_fltr_recv_all(&fltr, ¶ms->input, &enic->rte_dev->data->dev_conf.fdir_conf.mask);
break;
default:
pkt_size += sizeof(struct CRx_check_header);
}
break;
+ case EthernetHeader::Protocol::ARP:
+ pkt_size += sizeof(ArpHdr);
+ break;
}
switch (l4_proto) {
ipv6->setPayloadLen(pkt_size - 14 - sizeof(ipv6_header));
ipv6->setFlowLabel(ip_id);
break;
+ case EthernetHeader::Protocol::ARP:
+ uint16_t vlan = (flags & DPF_VLAN) ? 200 : 0;
+ create_arp_req((uint8_t *)p_start, 0x01020304, 0x05060708, src_mac, vlan, 0);
+ return p_start;
+ break;
}
-
struct TCPHeader *tcp = (TCPHeader *)p;
struct ICMPHeader *icmp= (ICMPHeader *)p;
switch (l4_proto) {