]> git.ipfire.org Git - ipfire-3.x.git/blame - ppp/patches/ppp-2.4.5-eth.patch
Merge remote-tracking branch 'stevee/docbook2X'
[ipfire-3.x.git] / ppp / patches / ppp-2.4.5-eth.patch
CommitLineData
0bc5d371
MT
1diff -up ppp-2.4.5/pppd/ether.c.inc.eth ppp-2.4.5/pppd/ether.c.inc
2--- ppp-2.4.5/pppd/ether.c.inc.eth 2011-06-01 10:28:35.356139063 +0200
3+++ ppp-2.4.5/pppd/ether.c.inc 2011-06-01 11:20:37.876897352 +0200
4@@ -0,0 +1,46 @@
5+#define PREF_ETH "eth"
6+#define PREF_EM "em"
7+
8+static char *dev_file = "/proc/self/net/dev";
9+
10+/*
11+ * get_first_ethernet - return the name of the first ethernet-style
12+ * interface on this system.
13+ */
14+char *
15+get_first_ethernet()
16+{
17+ FILE *f;
18+ char buf[255], *dv, *smc;
19+ char pci[16];
20+
21+ memset(pci, 0, sizeof(pci));
22+ if ((f = fopen(dev_file, "r")) != NULL)
23+ {
24+ // go through network dev file
25+ while (fgets (buf, sizeof(buf), f) != NULL)
26+ {
27+ // the line describes interface
28+ if ((smc = strchr(buf, ':')) != NULL)
29+ {
30+ // trim white characters
31+ for (dv=buf, *smc=0; *dv <= ' '; dv++) ;
32+ // is "eth" (originial ethernet name) or "em" (ethernet on board)
33+ if (!strncmp(dv, PREF_ETH, strlen(PREF_ETH)) ||
34+ !strncmp(dv, PREF_EM, strlen(PREF_EM)))
35+ {
36+ return strdup(dv);
37+ }
38+ // remember the first pci NIC-card
39+ if (strlen(pci) == 0 && dv[0] == 'p' && isdigit(dv[1]))
40+ {
41+ strcpy(pci, dv);
42+ }
43+ }
44+ }
45+ fclose(f);
46+ }
47+ // return pci NIC-card or nil if no if name
48+ return strlen(pci) > 0 ? strdup(pci) : 0L;
49+}
50+
51diff -up ppp-2.4.5/pppd/plugins/rp-pppoe/pppoe-discovery.c.eth ppp-2.4.5/pppd/plugins/rp-pppoe/pppoe-discovery.c
52--- ppp-2.4.5/pppd/plugins/rp-pppoe/pppoe-discovery.c.eth 2011-06-01 09:39:13.099343548 +0200
53+++ ppp-2.4.5/pppd/plugins/rp-pppoe/pppoe-discovery.c 2011-06-01 11:41:02.188252304 +0200
54@@ -47,6 +47,8 @@
55 #include <net/if_arp.h>
56 #endif
57
58+#include "../../ether.c.inc"
59+
60 char *xstrdup(const char *s);
61 void usage(void);
62
63@@ -686,7 +688,7 @@ int main(int argc, char *argv[])
64
65 /* default interface name */
66 if (!conn->ifName)
67- conn->ifName = strdup("eth0");
68+ conn->ifName = get_first_ethernet();
69
70 conn->discoverySocket = -1;
71 conn->sessionSocket = -1;
72diff -up ppp-2.4.5/pppd/sys-linux.c.eth ppp-2.4.5/pppd/sys-linux.c
73--- ppp-2.4.5/pppd/sys-linux.c.eth 2011-06-01 09:39:13.074343397 +0200
74+++ ppp-2.4.5/pppd/sys-linux.c 2011-06-01 11:50:13.736565685 +0200
75@@ -144,6 +144,8 @@
76 #include <sys/locks.h>
77 #endif
78
79+#include "ether.c.inc"
80+
81 #ifdef INET6
82 #ifndef _LINUX_IN6_H
83 /*
84@@ -1869,16 +1871,6 @@ get_if_hwaddr(u_char *addr, char *name)
85 return ret;
86 }
87
88-/*
89- * get_first_ethernet - return the name of the first ethernet-style
90- * interface on this system.
91- */
92-char *
93-get_first_ethernet()
94-{
95- return "eth0";
96-}
97-
98 /********************************************************************
99 *
100 * Return user specified netmask, modified by any mask we might determine
101@@ -2783,6 +2775,7 @@ ether_to_eui64(eui64_t *p_eui64)
102 struct ifreq ifr;
103 int skfd;
104 const unsigned char *ptr;
105+ char warn_msg[80];
106
107 skfd = socket_fd(PF_INET6, SOCK_DGRAM, 0);
108 if(skfd == -1)
109@@ -2791,11 +2784,13 @@ ether_to_eui64(eui64_t *p_eui64)
110 return 0;
111 }
112
113- strcpy(ifr.ifr_name, "eth0");
114+ strcpy(ifr.ifr_name, get_first_ethernet());
115 if(ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0)
116 {
117 close(skfd);
118- warn("could not obtain hardware address for eth0");
119+ snprintf(warn_msg, sizeof(warn_msg),
120+ "could not obtain hardware address for %s", ifr.ifr_name);
121+ warn(warn_msg);
122 return 0;
123 }
124 close(skfd);