jamal writes: > Manual labor still ... 1 of 4 > [PKTGEN] Centralize packet overhead tracking > Track the extra packet overhead for VLAN tags, MPLS, IPSEC etc > > Signed-off-by: Jamal Hadi Salim <[EMAIL PROTECTED]>
Thanks, Jamal. I'll guess the ipsec part is to be considered work-in-progress and you're doing both the work and the progress. Signed-off-by: Robert Olsson <[EMAIL PROTECTED]> Cheers --ro > diff --git a/net/core/pktgen.c b/net/core/pktgen.c > index 9cd3a1c..1352316 100644 > --- a/net/core/pktgen.c > +++ b/net/core/pktgen.c > @@ -228,6 +228,7 @@ struct pktgen_dev { > > int min_pkt_size; /* = ETH_ZLEN; */ > int max_pkt_size; /* = ETH_ZLEN; */ > + int pkt_overhead; /* overhead for MPLS, VLANs, IPSEC etc */ > int nfrags; > __u32 delay_us; /* Default delay */ > __u32 delay_ns; > @@ -2075,6 +2076,13 @@ static void spin(struct pktgen_dev *pkt_dev, __u64 > spin_until_us) > pkt_dev->idle_acc += now - start; > } > > +static inline void set_pkt_overhead(struct pktgen_dev *pkt_dev) > +{ > + pkt_dev->pkt_overhead += pkt_dev->nr_labels*sizeof(u32); > + pkt_dev->pkt_overhead += VLAN_TAG_SIZE(pkt_dev); > + pkt_dev->pkt_overhead += SVLAN_TAG_SIZE(pkt_dev); > +} > + > /* Increment/randomize headers according to flags and current values > * for IP src/dest, UDP src/dst port, MAC-Addr src/dst > */ > @@ -2323,9 +2331,7 @@ static struct sk_buff *fill_packet_ipv4(struct > net_device *odev, > > datalen = (odev->hard_header_len + 16) & ~0xf; > skb = alloc_skb(pkt_dev->cur_pkt_size + 64 + datalen + > - pkt_dev->nr_labels*sizeof(u32) + > - VLAN_TAG_SIZE(pkt_dev) + SVLAN_TAG_SIZE(pkt_dev), > - GFP_ATOMIC); > + pkt_dev->pkt_overhead, GFP_ATOMIC); > if (!skb) { > sprintf(pkt_dev->result, "No memory"); > return NULL; > @@ -2368,7 +2374,7 @@ static struct sk_buff *fill_packet_ipv4(struct > net_device *odev, > > /* Eth + IPh + UDPh + mpls */ > datalen = pkt_dev->cur_pkt_size - 14 - 20 - 8 - > - pkt_dev->nr_labels*sizeof(u32) - VLAN_TAG_SIZE(pkt_dev) - > SVLAN_TAG_SIZE(pkt_dev); > + pkt_dev->pkt_overhead; > if (datalen < sizeof(struct pktgen_hdr)) > datalen = sizeof(struct pktgen_hdr); > > @@ -2391,8 +2397,7 @@ static struct sk_buff *fill_packet_ipv4(struct > net_device *odev, > iph->check = ip_fast_csum((void *)iph, iph->ihl); > skb->protocol = protocol; > skb->mac_header = (skb->network_header - ETH_HLEN - > - pkt_dev->nr_labels * sizeof(u32) - > - VLAN_TAG_SIZE(pkt_dev) - SVLAN_TAG_SIZE(pkt_dev)); > + pkt_dev->pkt_overhead); > skb->dev = odev; > skb->pkt_type = PACKET_HOST; > > @@ -2662,9 +2667,7 @@ static struct sk_buff *fill_packet_ipv6(struct > net_device *odev, > mod_cur_headers(pkt_dev); > > skb = alloc_skb(pkt_dev->cur_pkt_size + 64 + 16 + > - pkt_dev->nr_labels*sizeof(u32) + > - VLAN_TAG_SIZE(pkt_dev) + SVLAN_TAG_SIZE(pkt_dev), > - GFP_ATOMIC); > + pkt_dev->pkt_overhead, GFP_ATOMIC); > if (!skb) { > sprintf(pkt_dev->result, "No memory"); > return NULL; > @@ -2708,7 +2711,7 @@ static struct sk_buff *fill_packet_ipv6(struct > net_device *odev, > /* Eth + IPh + UDPh + mpls */ > datalen = pkt_dev->cur_pkt_size - 14 - > sizeof(struct ipv6hdr) - sizeof(struct udphdr) - > - pkt_dev->nr_labels*sizeof(u32) - VLAN_TAG_SIZE(pkt_dev) - > SVLAN_TAG_SIZE(pkt_dev); > + pkt_dev->pkt_overhead; > > if (datalen < sizeof(struct pktgen_hdr)) { > datalen = sizeof(struct pktgen_hdr); > @@ -2738,8 +2741,7 @@ static struct sk_buff *fill_packet_ipv6(struct > net_device *odev, > ipv6_addr_copy(&iph->saddr, &pkt_dev->cur_in6_saddr); > > skb->mac_header = (skb->network_header - ETH_HLEN - > - pkt_dev->nr_labels * sizeof(u32) - > - VLAN_TAG_SIZE(pkt_dev) - SVLAN_TAG_SIZE(pkt_dev)); > + pkt_dev->pkt_overhead); > skb->protocol = protocol; > skb->dev = odev; > skb->pkt_type = PACKET_HOST; > @@ -2857,6 +2859,7 @@ static void pktgen_run(struct pktgen_thread *t) > pkt_dev->started_at = getCurUs(); > pkt_dev->next_tx_us = getCurUs(); /* Transmit > immediately */ > pkt_dev->next_tx_ns = 0; > + set_pkt_overhead(pkt_dev); > > strcpy(pkt_dev->result, "Starting"); > started++; - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html