diff -uNr netkit-base-0.17/etc.sample/inetd.conf.llc netkit-base-0.17.acme/etc.sample/inetd.conf.llc --- netkit-base-0.17/etc.sample/inetd.conf.llc Wed Dec 31 21:00:00 1969 +++ netkit-base-0.17.acme/etc.sample/inetd.conf.llc Sat Nov 17 22:12:22 2001 @@ -0,0 +1,2 @@ +#ftp stream llc nowait root /usr/sbin/in.ftpd in.ftpd -l -a +ftp stream llc nowait root /usr/src/linux-ftpd-0.17/ftpd/ftpd ftpd -L diff -uNr netkit-base-0.17/inetd/builtins.c netkit-base-0.17.acme/inetd/builtins.c --- netkit-base-0.17/inetd/builtins.c Sat Jul 22 17:13:07 2000 +++ netkit-base-0.17.acme/inetd/builtins.c Sat Nov 10 18:27:24 2001 @@ -6,6 +6,8 @@ #include #include #include +#include +#include #include #include #include diff -uNr netkit-base-0.17/inetd/inetd.c netkit-base-0.17.acme/inetd/inetd.c --- netkit-base-0.17/inetd/inetd.c Mon Jul 24 20:48:34 2000 +++ netkit-base-0.17.acme/inetd/inetd.c Fri Nov 30 12:55:58 2001 @@ -126,6 +126,8 @@ #include #include /* for inet_ntoa */ +#include +#include #include #include @@ -195,8 +197,18 @@ struct rlimit rlim_ofile; #endif +#define AF_LLC 26 +static int get_hwaddr(int skfd, char* ifname, unsigned char* dest) +{ + struct ifreq ifr; + strcpy(ifr.ifr_name, ifname); + if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) + memset(dest, 0, IFHWADDRLEN); + else + memcpy(dest, ifr.ifr_hwaddr.sa_data, IFHWADDRLEN); +} #ifdef sun /* @@ -879,6 +891,8 @@ } return; } + if (sep->se_family == AF_LLC) + get_hwaddr(sep->se_fd, "eth0", sep->se_ctrladdr_llc.sllc_smac); #define turnon(fd, opt) \ setsockopt(fd, SOL_SOCKET, opt, (char *)&on, sizeof (on)) if (strcmp(sep->se_proto, "tcp") == 0 && (options & SO_DEBUG) && diff -uNr netkit-base-0.17/inetd/servtab.c netkit-base-0.17.acme/inetd/servtab.c --- netkit-base-0.17/inetd/servtab.c Sat Jul 22 17:20:50 2000 +++ netkit-base-0.17.acme/inetd/servtab.c Thu Nov 22 21:46:33 2001 @@ -35,6 +35,9 @@ #include #include #include +#include +#include +#include #include #include #include @@ -43,6 +46,8 @@ #include #include +#define AF_LLC 26 + #include "inetd.h" #include "servtab.h" #include "builtins.h" @@ -283,6 +288,8 @@ sep->se_proto = dostrdup(skip(&cp)); if (strcmp(sep->se_proto, "unix") == 0) { sep->se_family = AF_UNIX; + } if (strcmp(sep->se_proto, "llc") == 0) { + sep->se_family = AF_LLC; } else { sep->se_family = AF_INET; if (strncmp(sep->se_proto, "rpc/", 4) == 0) { @@ -466,8 +473,9 @@ if (sep->se_address!=NULL) { return "@host given for unix socket"; } - } - else { + } else if (!strcmp(sep->se_proto, "llc")) { + sep->se_family = AF_LLC; + } else { sep->se_family = AF_INET; sep->se_ctrladdr_in.sin_addr = service_home; @@ -875,6 +883,17 @@ if (sep->se_fd == -1) setup(sep); } + break; + case AF_LLC: { + u_short port = htons(atoi(sep->se_service)); + + sep->se_ctrladdr_llc.sllc_family = AF_LLC; + sep->se_ctrladdr_llc.sllc_arphrd = ARPHRD_ETHER; + sep->se_ctrladdr_size = sizeof(sep->se_ctrladdr_llc); + sep->se_ctrladdr_llc.sllc_ssap = 90; + setup(sep); + break; + } } } @@ -943,6 +962,3 @@ } } } - - - diff -uNr netkit-base-0.17/inetd/servtab.h netkit-base-0.17.acme/inetd/servtab.h --- netkit-base-0.17/inetd/servtab.h Mon Aug 23 04:22:30 1999 +++ netkit-base-0.17.acme/inetd/servtab.h Sat Nov 10 18:27:24 2001 @@ -31,6 +31,7 @@ struct sockaddr se_un_ctrladdr; struct sockaddr_in se_un_ctrladdr_in; struct sockaddr_un se_un_ctrladdr_un; + struct sockaddr_llc se_un_ctrladdr_llc; } se_un; /* bound address */ int se_ctrladdr_size; int se_max; /* max # of instances of this service */ @@ -46,6 +47,7 @@ #define se_ctrladdr se_un.se_un_ctrladdr #define se_ctrladdr_in se_un.se_un_ctrladdr_in #define se_ctrladdr_un se_un.se_un_ctrladdr_un +#define se_ctrladdr_llc se_un.se_un_ctrladdr_llc extern struct servtab *servtab;