-int main( int argc, char* argv[] )
-{
- int s;
- int tmp = 0;
- int cmd = 0;
- char* optstr;
- char opt;
- struct sockaddr_nl nladdr;
- int err = 0;
- struct cegw_nlmsg req;
- struct cegw_data d;
- char rxbuf[8192]; /* ToDo: /linux/netlink.h? */
- int rsize = 0;
- struct nlmsghdr* nlh;
- struct nlmsgerr* rte;
- struct rtattr* rta;
- int len;
- struct list_item li;
-
- memset( &d, 0, sizeof(d) );
-
- struct option long_opt[] =
- {
- { "add" , 0, NULL, 'A' },
- { "flush" , 0, NULL, 'F' },
- { "list" , 0, NULL, 'L' },
- { "listen", 1, NULL, 'l' },
- { 0, 0, 0, 0 }
- };
-
- while( 1 )
- {
- opt = getopt_long( argc, argv, "AFLl:s:d:", long_opt, NULL );
- if( opt == -1 )
- break;
-
- switch( opt )
- {
- case 'A':
- cmd |= CEGW_CMD_ADD;
- break;
- case 'F':
- cmd |= CEGW_CMD_FLUSH;
- break;
- case 'L':
- cmd |= CEGW_CMD_LIST;
- break;
- case 'l':
- cmd |= CEGW_CMD_LISTEN;
- if( (optstr = read_iftype( optarg, &tmp )) == NULL )
- {
- perr( "'--listen'" );
- return -1;
- }
- if( tmp != IF_ETH_UDP )
- {
- perr( "'--listen' expects udp interface" );
- return -1;
- }
- if( read_addrport( optstr, &d.eth_listen_addr, &d.eth_listen_port ) )
- {
- perr( "'--listen'" );
- return -1;
+ dstcnt = argc-3;
+
+ for (i=1; i<argc; i++) {
+ switch (i) {
+ case 1: /* can ifindex */
+ nptr = strchr(argv[i], ',');
+ if (nptr) {
+ *nptr = '\0';