†††
††brdgadm.c†
/* */ dlbindreq (if_fd, 0, 0, DL_CLDLS, 0, 0); dlbindack (if_fd, buf); /* */ dlpromisconreq(if_fd, DL_PROMISC_SAP); dlokack(if_fd, buf); dlpromisconreq(if_fd, DL_PROMISC_PHYS); dlokack(if_fd, buf); /* * (PLINK = persist link) */ mux_id = ioctl(ip_fd, I_PLINK, if_fd); if( mux_id < 0){ perror("I_PLINK ioctl failed"); exit(0); } printf("mux_id = %d\n", mux_id); printf("Please write down mux_id.\nThis mux_id will be used for -d (=delete)\n"); if ((ip_fd = open("/dev/ip", O_RDWR)) < 0) syserr("/dev/ip"); if (ioctl(ip_fd, I_PUNLINK, mux_id) < 0) { perror("I_PUNLINK ioctl failed"); exit(0); } brdg.c†typedef struct port_s { queue_t *qptr; char *ifname; }port_t; port_t port_list[MAXPORT]; typedef struct source_entry_s { struct ether_addr ether_source; port_t *port; int state; } source_entry_t; source_entry_t source_hash_table[MAXHASH]; ††# make /usr/local/bin/gcc -g -D_KERNEL -c brdg.c -o brdg32.o /usr/ucb/ld -dn -r brdg32.o -o brdg32 /usr/local/bin/gcc -g -D_KERNEL -c brdg.c -m64 /usr/ucb/ld -dn -r brdg.o -o brdg /usr/local/bin/gcc -g -lnsl -lsocket brdgadm.c -o brdgadm # make install /bin/cp brdg /kernel/strmod/sparcv9/brdg /usr/sbin/modload brdg # make install32 /bin/cp brdg32 /kernel/strmod/brdg /usr/sbin/modload brdg †# make uninstall /bin/rm /kernel/strmod/sparcv9/brdg /usr/sbin/modunload -i `/usr/sbin/modinfo | awk '/brdg/{ print }'` # make uninstall /bin/rm /kernel/strmod/sparcv9/brdg /usr/sbin/modunload -i `/usr/sbin/modinfo | awk '/brdg/{ print }'` can't unload the module: Device busy make: *** [uninstall] Error 16 †Usage: brdgadm [-a <interface> | -d mux_id ] †# ./brdgadm -a hme0 devname = hme, ppa = 0 devpath = /dev/hme mux_id = 11 Please write down mux_id. This mux_id will be used for -d (=delete) # ./brdgadm -a le0 devname = le, ppa = 0 devpath = /dev/le mux_id = 12 Please write down mux_id. This mux_id will be used for -d (=delete) †# ./brdgadm -d 11 mux_id 11 is being deleted... Done # ./brdgadm -d 12 mux_id 12 is being deleted... Done †# ifconfig -a lo0: flags=1000849 mtu 8232 index 1 inet 127.0.0.1 netmask ff000000 # † |