author | Mike Sullivan <Mike.Sullivan@Oracle.COM> |
Tue, 19 Jul 2011 11:37:03 -0700 | |
changeset 423 | 416940827b10 |
permissions | -rw-r--r-- |
423
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
1 |
--- libnet-1.1.2.1/src/libnet_link_dlpi.c.orig Thu Jul 14 14:55:07 2011 |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
2 |
+++ libnet-1.1.2.1/src/libnet_link_dlpi.c Thu Jul 14 14:55:27 2011 |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
3 |
@@ -123,6 +123,9 @@ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
4 |
int8_t dname2[100]; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
5 |
#endif |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
6 |
|
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
7 |
+ int8_t dev_net_dname[200]; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
8 |
+ uint32_t dev_str_len; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
9 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
10 |
if (l == NULL) |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
11 |
{ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
12 |
return (-1); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
13 |
@@ -130,21 +133,23 @@ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
14 |
|
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
15 |
/* |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
16 |
* Determine device and ppa |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
17 |
+ * ppa is the last numeric token in the datalink name |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
18 |
*/ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
19 |
- cp = strpbrk(l->device, "0123456789"); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
20 |
- if (cp == NULL) |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
21 |
- { |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
22 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
23 |
+ eos = l->device; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
24 |
+ ppa = -1; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
25 |
+ do { |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
26 |
+ cp = strpbrk(eos, "0123456789"); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
27 |
+ if (cp != NULL) { |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
28 |
+ ppa = strtol(cp, &eos, 10); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
29 |
+ } |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
30 |
+ } while (*eos != '\0' && cp != NULL); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
31 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
32 |
+ if (ppa == -1) { |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
33 |
snprintf(l->err_buf, LIBNET_ERRBUF_SIZE, |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
34 |
- "%s(): %s is missing unit number\n", __func__, l->device); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
35 |
- goto bad; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
36 |
+ "%s(): %s is missing unit number\n", __func__, l->device); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
37 |
+ goto bad; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
38 |
} |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
39 |
- ppa = strtol(cp, &eos, 10); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
40 |
- if (*eos != '\0') |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
41 |
- { |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
42 |
- snprintf(l->err_buf, LIBNET_ERRBUF_SIZE, |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
43 |
- "%s(): %s bad unit number\n", __func__, l->device); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
44 |
- goto bad; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
45 |
- } |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
46 |
|
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
47 |
if (*(l->device) == '/') |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
48 |
{ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
49 |
@@ -157,6 +162,7 @@ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
50 |
sprintf(dname, "%s/%s", DLPI_DEV_PREFIX, l->device); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
51 |
} |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
52 |
#ifdef HAVE_DEV_DLPI |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
53 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
54 |
/* |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
55 |
* Map network device to /dev/dlpi unit |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
56 |
*/ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
57 |
@@ -179,6 +185,7 @@ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
58 |
goto bad; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
59 |
} |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
60 |
#else |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
61 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
62 |
/* |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
63 |
* Try device without unit number |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
64 |
*/ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
65 |
@@ -186,6 +193,40 @@ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
66 |
cp = strchr(dname, *cp); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
67 |
*cp = '\0'; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
68 |
|
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
69 |
+ /* |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
70 |
+ * First try the /dev/net vanity device name: |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
71 |
+ * /dev/net/<original_with_num> (DLPI style 1), |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
72 |
+ * and then fallback to the original device name. |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
73 |
+ */ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
74 |
+ dev_str_len = strlen("/dev/"); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
75 |
+ memset(dev_net_dname, 0, sizeof(dev_net_dname)); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
76 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
77 |
+ if(strlen(dname2) > dev_str_len) { |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
78 |
+ snprintf(dev_net_dname, sizeof(dev_net_dname), |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
79 |
+ "/dev/net/%s", dname2+dev_str_len); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
80 |
+ } |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
81 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
82 |
+ l->fd = open(dev_net_dname, O_RDWR); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
83 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
84 |
+ if(l->fd == -1) { |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
85 |
+ goto old_style_open; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
86 |
+ } |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
87 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
88 |
+ cp = dev_net_dname; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
89 |
+ while(*cp && !isdigit((int)*cp)) { |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
90 |
+ cp++; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
91 |
+ } |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
92 |
+ if(*cp) { |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
93 |
+ ppa = atoi(cp); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
94 |
+ } else { |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
95 |
+ ppa = 0; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
96 |
+ } |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
97 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
98 |
+ goto opened_device; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
99 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
100 |
+ /* If opening device via /dev/net fails */ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
101 |
+ old_style_open: |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
102 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
103 |
l->fd = open(dname, O_RDWR); |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
104 |
if (l->fd == -1) |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
105 |
{ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
106 |
@@ -223,6 +264,9 @@ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
107 |
ppa = 0; |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
108 |
} |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
109 |
#endif |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
110 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
111 |
+ opened_device: |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
112 |
+ |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
113 |
/* |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
114 |
* Attach if "style 2" provider |
416940827b10
7067759 I cast Ressurect Libnet
Mike Sullivan <Mike.Sullivan@Oracle.COM>
parents:
diff
changeset
|
115 |
*/ |