components/libnet/patches/libnet_link_dlpi.c.patch
author Mike Sullivan <Mike.Sullivan@Oracle.COM>
Tue, 19 Jul 2011 11:37:03 -0700
changeset 423 416940827b10
permissions -rw-r--r--
7067759 I cast Ressurect Libnet
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
      */