--- etc/atalkd/multicast.c.orig	Sat Aug 29 09:46:11 1998
+++ etc/atalkd/multicast.c	Mon Nov 23 22:53:21 1998
@@ -305,6 +305,28 @@
 };
 
 
+#if __FreeBSD__ >= 2
+#include <osreldate.h>
+#if __FreeBSD_version >= 300000
+
+#include <net/if_dl.h>
+
+/* configure multicast for a given named interface */
+int addmulti(const char *name, const unsigned char *data)
+{
+    struct sockaddr_dl sdl;
+
+    bzero(&sdl, sizeof(struct sockaddr_dl));
+    sdl.sdl_family = AF_LINK;
+    bcopy(ethermulti, LLADDR(&sdl), sizeof(ethermulti));
+    sdl.sdl_alen = sizeof(ethermulti);
+    sdl.sdl_len = sizeof(sdl);
+    if (ifconfig(name, SIOCADDMULTI, &sdl))
+      return -1;
+
+    return 0;
+}
+#else
 /* configure multicast for a given named interface */
 int addmulti(const char *name, const unsigned char *data)
 {
@@ -317,6 +339,8 @@
 
     return 0;
 }
+#endif /* __FreeBSD_version >= 300000 */
+#endif /* __FreeBSD__ >= 2 */
 
 static u_int16_t
 atalk_cksum( data, len )
