]> git.ipfire.org Git - people/amarx/ipfire-3.x.git/blob - ppp/patches/ppp-2.4.5-eth.patch
Change file layout of the makefiles.
[people/amarx/ipfire-3.x.git] / ppp / patches / ppp-2.4.5-eth.patch
1 diff -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 +
51 diff -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;
72 diff -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);