diff options
author | Robert Olsson <robert.olsson@its.uu.se> | 2005-06-26 18:27:10 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-06-26 18:27:10 -0400 |
commit | 64053beeb5a5f9cd79903a8c3dd35d1ef0a4685f (patch) | |
tree | 600727f49238660af689f805ab9bd8feb421c807 /net/core | |
parent | 60fe7403209179fccd6629172c4b36acc69c5db6 (diff) |
[PKTGEN]: Fix random packet sizes causing panic
Signed-off-by: Robert Olsson <robert.olsson@its.uu.se>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/pktgen.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c index c57b06bc79f3..975d651312dc 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c | |||
@@ -151,7 +151,7 @@ | |||
151 | #include <asm/timex.h> | 151 | #include <asm/timex.h> |
152 | 152 | ||
153 | 153 | ||
154 | #define VERSION "pktgen v2.61: Packet Generator for packet performance testing.\n" | 154 | #define VERSION "pktgen v2.62: Packet Generator for packet performance testing.\n" |
155 | 155 | ||
156 | /* #define PG_DEBUG(a) a */ | 156 | /* #define PG_DEBUG(a) a */ |
157 | #define PG_DEBUG(a) | 157 | #define PG_DEBUG(a) |
@@ -1921,6 +1921,11 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev, | |||
1921 | struct iphdr *iph; | 1921 | struct iphdr *iph; |
1922 | struct pktgen_hdr *pgh = NULL; | 1922 | struct pktgen_hdr *pgh = NULL; |
1923 | 1923 | ||
1924 | /* Update any of the values, used when we're incrementing various | ||
1925 | * fields. | ||
1926 | */ | ||
1927 | mod_cur_headers(pkt_dev); | ||
1928 | |||
1924 | skb = alloc_skb(pkt_dev->cur_pkt_size + 64 + 16, GFP_ATOMIC); | 1929 | skb = alloc_skb(pkt_dev->cur_pkt_size + 64 + 16, GFP_ATOMIC); |
1925 | if (!skb) { | 1930 | if (!skb) { |
1926 | sprintf(pkt_dev->result, "No memory"); | 1931 | sprintf(pkt_dev->result, "No memory"); |
@@ -1934,11 +1939,6 @@ static struct sk_buff *fill_packet_ipv4(struct net_device *odev, | |||
1934 | iph = (struct iphdr *)skb_put(skb, sizeof(struct iphdr)); | 1939 | iph = (struct iphdr *)skb_put(skb, sizeof(struct iphdr)); |
1935 | udph = (struct udphdr *)skb_put(skb, sizeof(struct udphdr)); | 1940 | udph = (struct udphdr *)skb_put(skb, sizeof(struct udphdr)); |
1936 | 1941 | ||
1937 | /* Update any of the values, used when we're incrementing various | ||
1938 | * fields. | ||
1939 | */ | ||
1940 | mod_cur_headers(pkt_dev); | ||
1941 | |||
1942 | memcpy(eth, pkt_dev->hh, 12); | 1942 | memcpy(eth, pkt_dev->hh, 12); |
1943 | *(u16*)ð[12] = __constant_htons(ETH_P_IP); | 1943 | *(u16*)ð[12] = __constant_htons(ETH_P_IP); |
1944 | 1944 | ||
@@ -2192,7 +2192,12 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev, | |||
2192 | int datalen; | 2192 | int datalen; |
2193 | struct ipv6hdr *iph; | 2193 | struct ipv6hdr *iph; |
2194 | struct pktgen_hdr *pgh = NULL; | 2194 | struct pktgen_hdr *pgh = NULL; |
2195 | 2195 | ||
2196 | /* Update any of the values, used when we're incrementing various | ||
2197 | * fields. | ||
2198 | */ | ||
2199 | mod_cur_headers(pkt_dev); | ||
2200 | |||
2196 | skb = alloc_skb(pkt_dev->cur_pkt_size + 64 + 16, GFP_ATOMIC); | 2201 | skb = alloc_skb(pkt_dev->cur_pkt_size + 64 + 16, GFP_ATOMIC); |
2197 | if (!skb) { | 2202 | if (!skb) { |
2198 | sprintf(pkt_dev->result, "No memory"); | 2203 | sprintf(pkt_dev->result, "No memory"); |
@@ -2206,17 +2211,9 @@ static struct sk_buff *fill_packet_ipv6(struct net_device *odev, | |||
2206 | iph = (struct ipv6hdr *)skb_put(skb, sizeof(struct ipv6hdr)); | 2211 | iph = (struct ipv6hdr *)skb_put(skb, sizeof(struct ipv6hdr)); |
2207 | udph = (struct udphdr *)skb_put(skb, sizeof(struct udphdr)); | 2212 | udph = (struct udphdr *)skb_put(skb, sizeof(struct udphdr)); |
2208 | 2213 | ||
2209 | |||
2210 | /* Update any of the values, used when we're incrementing various | ||
2211 | * fields. | ||
2212 | */ | ||
2213 | mod_cur_headers(pkt_dev); | ||
2214 | |||
2215 | |||
2216 | memcpy(eth, pkt_dev->hh, 12); | 2214 | memcpy(eth, pkt_dev->hh, 12); |
2217 | *(u16*)ð[12] = __constant_htons(ETH_P_IPV6); | 2215 | *(u16*)ð[12] = __constant_htons(ETH_P_IPV6); |
2218 | 2216 | ||
2219 | |||
2220 | datalen = pkt_dev->cur_pkt_size-14- | 2217 | datalen = pkt_dev->cur_pkt_size-14- |
2221 | sizeof(struct ipv6hdr)-sizeof(struct udphdr); /* Eth + IPh + UDPh */ | 2218 | sizeof(struct ipv6hdr)-sizeof(struct udphdr); /* Eth + IPh + UDPh */ |
2222 | 2219 | ||