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 <sys/time.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
+#include <linux/if.h>
+#include <linux/llc.h>
 #include <arpa/inet.h>
 #include <sys/un.h>
 #include <errno.h>
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 <netinet/in.h>
 #include <arpa/inet.h>  /* for inet_ntoa */
+#include <linux/if.h>
+#include <linux/llc.h>
 
 #include <errno.h>
 #include <netdb.h>
@@ -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 <sys/time.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
+#include <linux/if.h>
+#include <linux/llc.h>
+#include <netinet/ether.h>
 #include <sys/un.h>
 #include <netdb.h>
 #include <syslog.h>
@@ -43,6 +46,8 @@
 #include <stdlib.h>
 #include <stdio.h>
 
+#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;
