--- a/src/br2684/br2684ctl.c +++ b/src/br2684/br2684ctl.c @@ -1,3 +1,4 @@ +#define _GNU_SOURCE #include #include #include @@ -43,6 +44,7 @@ struct br2684_params { int lastsock, lastitf; +static char *up_script; void fatal(const char *str, int err) @@ -185,6 +187,8 @@ int assign_vcc(char *astr, int encap, in void start_interface(struct br2684_params* params) { + char *cmd; + if (params->astr==NULL) { syslog(LOG_ERR, "Required ATM parameters not specified."); exit(1); @@ -193,13 +197,18 @@ void start_interface(struct br2684_param create_br(params->itfnum, params->payload); assign_vcc(params->astr, params->encap, params->payload, params->sndbuf, params->reqqos); + if (up_script) { + asprintf(&cmd, "%s nas%d", up_script, lastitf); + system(cmd); + free(cmd); + } } void usage(char *s) { printf("usage: %s [-b] [[-c number] [-e 0|1] [-s sndbuf] [-q qos] [-p 0|1] " - "[-a [itf.]vpi.vci]*]*\n", s); + "[-a [itf.]vpi.vci]*]* [-S script]\n", s); printf(" encapsulations: 0=llc, 1=vcmux\n payloads: 0=routed, 1=bridged\n"); exit(1); } @@ -225,7 +234,7 @@ int main (int argc, char **argv) openlog (LOG_NAME,LOG_OPTION,LOG_FACILITY); if (argc>1) - while ((c = getopt(argc, argv,"q:a:bc:e:s:p:?h")) !=EOF) + while ((c = getopt(argc, argv,"q:a:bc:e:s:S:p:?h")) !=EOF) switch (c) { case 'q': printf ("optarg : %s",optarg); @@ -258,6 +267,9 @@ int main (int argc, char **argv) params.sndbuf=8192; } break; + case 'S': + up_script = optarg; + break; case 'p': /* payload type: routed (0) or bridged (1) */ #ifdef BR2684_FLAG_ROUTED params.payload = atoi(optarg);