brdgadm
brdg


device_open.png



push_brdg.png



i_plink.png



close_device.png



link_2streams.png



upper_multiplexer.png


lower_multiplexer.png




#include <unistd.h>
#include <stropts.h>
#include <sys/conf.h>
int ioctl(int FD1, I_LINK, int FD2);



flow.png

brdg_1.tar

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
#



トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS