aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/pktgen.c
diff options
context:
space:
mode:
authorAlexey Dobriyan <adobriyan@gmail.com>2011-05-03 07:23:40 -0400
committerDavid S. Miller <davem@davemloft.net>2011-05-08 18:50:31 -0400
commit47a0200d535f08ac8f784a709c48995ca0b10288 (patch)
treef52f8b25710ea0017f66095ee7de7791df72f55f /net/core/pktgen.c
parent57cc71bc3c0cf18bfd1b7bc8cd0eb6c303da24c5 (diff)
pktgen: use %pI6c for printing IPv6 addresses
I don't know why %pI6 doesn't compress, but the format specifier is kernel-standard, so use it. Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/pktgen.c')
-rw-r--r--net/core/pktgen.c109
1 files changed, 13 insertions, 96 deletions
diff --git a/net/core/pktgen.c b/net/core/pktgen.c
index ff79d94b594..d41d88b53e1 100644
--- a/net/core/pktgen.c
+++ b/net/core/pktgen.c
@@ -449,7 +449,6 @@ static void pktgen_stop(struct pktgen_thread *t);
449static void pktgen_clear_counters(struct pktgen_dev *pkt_dev); 449static void pktgen_clear_counters(struct pktgen_dev *pkt_dev);
450 450
451static unsigned int scan_ip6(const char *s, char ip[16]); 451static unsigned int scan_ip6(const char *s, char ip[16]);
452static unsigned int fmt_ip6(char *s, const char ip[16]);
453 452
454/* Module parameters, defaults. */ 453/* Module parameters, defaults. */
455static int pg_count_d __read_mostly = 1000; 454static int pg_count_d __read_mostly = 1000;
@@ -556,21 +555,13 @@ static int pktgen_if_show(struct seq_file *seq, void *v)
556 pkt_dev->skb_priority); 555 pkt_dev->skb_priority);
557 556
558 if (pkt_dev->flags & F_IPV6) { 557 if (pkt_dev->flags & F_IPV6) {
559 char b1[128], b2[128], b3[128];
560 fmt_ip6(b1, pkt_dev->in6_saddr.s6_addr);
561 fmt_ip6(b2, pkt_dev->min_in6_saddr.s6_addr);
562 fmt_ip6(b3, pkt_dev->max_in6_saddr.s6_addr);
563 seq_printf(seq, 558 seq_printf(seq,
564 " saddr: %s min_saddr: %s max_saddr: %s\n", b1, 559 " saddr: %pI6c min_saddr: %pI6c max_saddr: %pI6c\n"
565 b2, b3); 560 " daddr: %pI6c min_daddr: %pI6c max_daddr: %pI6c\n",
566 561 &pkt_dev->in6_saddr,
567 fmt_ip6(b1, pkt_dev->in6_daddr.s6_addr); 562 &pkt_dev->min_in6_saddr, &pkt_dev->max_in6_saddr,
568 fmt_ip6(b2, pkt_dev->min_in6_daddr.s6_addr); 563 &pkt_dev->in6_daddr,
569 fmt_ip6(b3, pkt_dev->max_in6_daddr.s6_addr); 564 &pkt_dev->min_in6_daddr, &pkt_dev->max_in6_daddr);
570 seq_printf(seq,
571 " daddr: %s min_daddr: %s max_daddr: %s\n", b1,
572 b2, b3);
573
574 } else { 565 } else {
575 seq_printf(seq, 566 seq_printf(seq,
576 " dst_min: %s dst_max: %s\n", 567 " dst_min: %s dst_max: %s\n",
@@ -706,10 +697,9 @@ static int pktgen_if_show(struct seq_file *seq, void *v)
706 pkt_dev->cur_src_mac_offset); 697 pkt_dev->cur_src_mac_offset);
707 698
708 if (pkt_dev->flags & F_IPV6) { 699 if (pkt_dev->flags & F_IPV6) {
709 char b1[128], b2[128]; 700 seq_printf(seq, " cur_saddr: %pI6c cur_daddr: %pI6c\n",
710 fmt_ip6(b1, pkt_dev->cur_in6_daddr.s6_addr); 701 &pkt_dev->cur_in6_saddr,
711 fmt_ip6(b2, pkt_dev->cur_in6_saddr.s6_addr); 702 &pkt_dev->cur_in6_daddr);
712 seq_printf(seq, " cur_saddr: %s cur_daddr: %s\n", b2, b1);
713 } else 703 } else
714 seq_printf(seq, " cur_saddr: 0x%x cur_daddr: 0x%x\n", 704 seq_printf(seq, " cur_saddr: 0x%x cur_daddr: 0x%x\n",
715 pkt_dev->cur_saddr, pkt_dev->cur_daddr); 705 pkt_dev->cur_saddr, pkt_dev->cur_daddr);
@@ -1309,7 +1299,7 @@ static ssize_t pktgen_if_write(struct file *file,
1309 buf[len] = 0; 1299 buf[len] = 0;
1310 1300
1311 scan_ip6(buf, pkt_dev->in6_daddr.s6_addr); 1301 scan_ip6(buf, pkt_dev->in6_daddr.s6_addr);
1312 fmt_ip6(buf, pkt_dev->in6_daddr.s6_addr); 1302 snprintf(buf, sizeof(buf), "%pI6c", &pkt_dev->in6_daddr);
1313 1303
1314 ipv6_addr_copy(&pkt_dev->cur_in6_daddr, &pkt_dev->in6_daddr); 1304 ipv6_addr_copy(&pkt_dev->cur_in6_daddr, &pkt_dev->in6_daddr);
1315 1305
@@ -1332,7 +1322,7 @@ static ssize_t pktgen_if_write(struct file *file,
1332 buf[len] = 0; 1322 buf[len] = 0;
1333 1323
1334 scan_ip6(buf, pkt_dev->min_in6_daddr.s6_addr); 1324 scan_ip6(buf, pkt_dev->min_in6_daddr.s6_addr);
1335 fmt_ip6(buf, pkt_dev->min_in6_daddr.s6_addr); 1325 snprintf(buf, sizeof(buf), "%pI6c", &pkt_dev->min_in6_daddr);
1336 1326
1337 ipv6_addr_copy(&pkt_dev->cur_in6_daddr, 1327 ipv6_addr_copy(&pkt_dev->cur_in6_daddr,
1338 &pkt_dev->min_in6_daddr); 1328 &pkt_dev->min_in6_daddr);
@@ -1355,7 +1345,7 @@ static ssize_t pktgen_if_write(struct file *file,
1355 buf[len] = 0; 1345 buf[len] = 0;
1356 1346
1357 scan_ip6(buf, pkt_dev->max_in6_daddr.s6_addr); 1347 scan_ip6(buf, pkt_dev->max_in6_daddr.s6_addr);
1358 fmt_ip6(buf, pkt_dev->max_in6_daddr.s6_addr); 1348 snprintf(buf, sizeof(buf), "%pI6c", &pkt_dev->max_in6_daddr);
1359 1349
1360 if (debug) 1350 if (debug)
1361 printk(KERN_DEBUG "pktgen: dst6_max set to: %s\n", buf); 1351 printk(KERN_DEBUG "pktgen: dst6_max set to: %s\n", buf);
@@ -1376,7 +1366,7 @@ static ssize_t pktgen_if_write(struct file *file,
1376 buf[len] = 0; 1366 buf[len] = 0;
1377 1367
1378 scan_ip6(buf, pkt_dev->in6_saddr.s6_addr); 1368 scan_ip6(buf, pkt_dev->in6_saddr.s6_addr);
1379 fmt_ip6(buf, pkt_dev->in6_saddr.s6_addr); 1369 snprintf(buf, sizeof(buf), "%pI6c", &pkt_dev->in6_saddr);
1380 1370
1381 ipv6_addr_copy(&pkt_dev->cur_in6_saddr, &pkt_dev->in6_saddr); 1371 ipv6_addr_copy(&pkt_dev->cur_in6_saddr, &pkt_dev->in6_saddr);
1382 1372
@@ -2898,79 +2888,6 @@ static unsigned int scan_ip6(const char *s, char ip[16])
2898 return len; 2888 return len;
2899} 2889}
2900 2890
2901static char tohex(char hexdigit)
2902{
2903 return hexdigit > 9 ? hexdigit + 'a' - 10 : hexdigit + '0';
2904}
2905
2906static int fmt_xlong(char *s, unsigned int i)
2907{
2908 char *bak = s;
2909 *s = tohex((i >> 12) & 0xf);
2910 if (s != bak || *s != '0')
2911 ++s;
2912 *s = tohex((i >> 8) & 0xf);
2913 if (s != bak || *s != '0')
2914 ++s;
2915 *s = tohex((i >> 4) & 0xf);
2916 if (s != bak || *s != '0')
2917 ++s;
2918 *s = tohex(i & 0xf);
2919 return s - bak + 1;
2920}
2921
2922static unsigned int fmt_ip6(char *s, const char ip[16])
2923{
2924 unsigned int len;
2925 unsigned int i;
2926 unsigned int temp;
2927 unsigned int compressing;
2928 int j;
2929
2930 len = 0;
2931 compressing = 0;
2932 for (j = 0; j < 16; j += 2) {
2933
2934#ifdef V4MAPPEDPREFIX
2935 if (j == 12 && !memcmp(ip, V4mappedprefix, 12)) {
2936 inet_ntoa_r(*(struct in_addr *)(ip + 12), s);
2937 temp = strlen(s);
2938 return len + temp;
2939 }
2940#endif
2941 temp = ((unsigned long)(unsigned char)ip[j] << 8) +
2942 (unsigned long)(unsigned char)ip[j + 1];
2943 if (temp == 0) {
2944 if (!compressing) {
2945 compressing = 1;
2946 if (j == 0) {
2947 *s++ = ':';
2948 ++len;
2949 }
2950 }
2951 } else {
2952 if (compressing) {
2953 compressing = 0;
2954 *s++ = ':';
2955 ++len;
2956 }
2957 i = fmt_xlong(s, temp);
2958 len += i;
2959 s += i;
2960 if (j < 14) {
2961 *s++ = ':';
2962 ++len;
2963 }
2964 }
2965 }
2966 if (compressing) {
2967 *s++ = ':';
2968 ++len;
2969 }
2970 *s = 0;
2971 return len;
2972}
2973
2974static struct sk_buff *fill_packet_ipv6(struct net_device *odev, 2891static struct sk_buff *fill_packet_ipv6(struct net_device *odev,
2975 struct pktgen_dev *pkt_dev) 2892 struct pktgen_dev *pkt_dev)
2976{ 2893{