| ... | ... |
@@ -14,28 +14,30 @@ static void usage() |
| 14 | 14 |
version_print(); |
| 15 | 15 |
printf("(Multicasts All-Kinds of Updating Operation for Servers on Administered Network)\n\n");
|
| 16 | 16 |
printf("usage: makuosan [OPTION]\n");
|
| 17 |
- printf(" -d num # loglevel(0-9)\n");
|
|
| 18 |
- printf(" -u uid # user\n");
|
|
| 19 |
- printf(" -g gid # group\n");
|
|
| 20 |
- printf(" -G gid,..# groups\n");
|
|
| 21 |
- printf(" -b dir # base dir\n");
|
|
| 22 |
- printf(" -p port # port number (default: 5000)\n");
|
|
| 23 |
- printf(" -m addr # multicast address (default: 224.0.0.108)\n");
|
|
| 24 |
- printf(" -l addr # listen address (default: 127.0.0.1)\n");
|
|
| 25 |
- printf(" -U path # unix domain socket\n");
|
|
| 26 |
- printf(" -k file # key file (encrypt password)\n");
|
|
| 27 |
- printf(" -K file # key file (console password)\n");
|
|
| 28 |
- printf(" -f num # parallel send count(default: 5) \n");
|
|
| 29 |
- printf(" -R num # recv buffer size [bytes]\n");
|
|
| 30 |
- printf(" -S num # send buffer size [bytes]\n");
|
|
| 31 |
- printf(" -T num # traffic rate [Mbps]\n");
|
|
| 32 |
- printf(" -c # chroot to base dir\n");
|
|
| 33 |
- printf(" -n # don't fork\n");
|
|
| 34 |
- printf(" -r # don't recv\n");
|
|
| 35 |
- printf(" -s # don't send\n");
|
|
| 36 |
- printf(" -o # don't listen (console off mode)\n");
|
|
| 37 |
- printf(" -O # owner match limitation mode\n");
|
|
| 38 |
- printf(" -h # help\n\n");
|
|
| 17 |
+ printf(" -d num # loglevel(0-9)\n");
|
|
| 18 |
+ printf(" -u uid # user\n");
|
|
| 19 |
+ printf(" -g gid # group\n");
|
|
| 20 |
+ printf(" -G gid,.. # groups\n");
|
|
| 21 |
+ printf(" -b dir # base dir\n");
|
|
| 22 |
+ printf(" -p port # port number (default: 5000)\n");
|
|
| 23 |
+ printf(" -m addr # multicast address (default: 224.0.0.108)\n");
|
|
| 24 |
+ printf(" -i addr # interface address (default: 0.0.0.0)\n");
|
|
| 25 |
+ printf(" -l addr # listen address (default: 127.0.0.1)\n");
|
|
| 26 |
+ printf(" -U path # unix domain socket\n");
|
|
| 27 |
+ printf(" -k file # key file (encrypt password)\n");
|
|
| 28 |
+ printf(" -K file # key file (console password)\n");
|
|
| 29 |
+ printf(" -f num # parallel send count(default: 5) \n");
|
|
| 30 |
+ printf(" -R num # recv buffer size [bytes]\n");
|
|
| 31 |
+ printf(" -S num # send buffer size [bytes]\n");
|
|
| 32 |
+ printf(" -T num # traffic rate [Mbps]\n");
|
|
| 33 |
+ printf(" -n # don't fork\n");
|
|
| 34 |
+ printf(" -r # don't recv\n");
|
|
| 35 |
+ printf(" -s # don't send\n");
|
|
| 36 |
+ printf(" -o # don't listen (console off mode)\n");
|
|
| 37 |
+ printf(" -O # owner match limitation mode\n");
|
|
| 38 |
+ printf(" -c --chroot # chroot to base dir\n");
|
|
| 39 |
+ printf(" -V --version # version\n");
|
|
| 40 |
+ printf(" -h --help # help\n\n");
|
|
| 39 | 41 |
exit(0); |
| 40 | 42 |
} |
| 41 | 43 |
|
| ... | ... |
@@ -70,6 +72,9 @@ static void minit_option_setdefault() |
| 70 | 70 |
moption.maddr.sin_family = AF_INET; |
| 71 | 71 |
moption.maddr.sin_addr.s_addr = inet_addr(MAKUO_MCAST_ADDR); |
| 72 | 72 |
moption.maddr.sin_port = htons(MAKUO_MCAST_PORT); |
| 73 |
+ moption.iaddr.sin_family = AF_INET; |
|
| 74 |
+ moption.iaddr.sin_addr.s_addr = INADDR_ANY; |
|
| 75 |
+ moption.iaddr.sin_port = htons(MAKUO_MCAST_PORT); |
|
| 73 | 76 |
moption.laddr.sin_family = AF_INET; |
| 74 | 77 |
moption.laddr.sin_addr.s_addr = inet_addr(MAKUO_LOCAL_ADDR); |
| 75 | 78 |
moption.laddr.sin_port = htons(MAKUO_MCAST_PORT); |
| ... | ... |
@@ -308,8 +313,14 @@ static void minit_password(char *filename, int n) |
| 308 | 308 |
static void minit_getopt(int argc, char *argv[]) |
| 309 | 309 |
{
|
| 310 | 310 |
int r; |
| 311 |
- |
|
| 312 |
- while((r=getopt(argc, argv, "T:R:S:f:u:g:G:d:b:p:m:l:U:k:K:VhnsroOc")) != -1){
|
|
| 311 |
+ struct option opt[]={
|
|
| 312 |
+ "chroot", 0, NULL, 'c', |
|
| 313 |
+ "help", 0, NULL, 'h', |
|
| 314 |
+ "version", 0, NULL, 'V', |
|
| 315 |
+ 0, 0, 0, 0 |
|
| 316 |
+ }; |
|
| 317 |
+ |
|
| 318 |
+ while((r=getopt_long(argc, argv, "T:R:S:f:u:g:G:d:b:p:m:i:l:U:k:K:VhnsroOc", opt, NULL)) != -1){
|
|
| 313 | 319 |
switch(r){
|
| 314 | 320 |
case 'V': |
| 315 | 321 |
version_print(); |
| ... | ... |
@@ -391,6 +402,10 @@ static void minit_getopt(int argc, char *argv[]) |
| 391 | 391 |
moption.maddr.sin_addr.s_addr = inet_addr(optarg); |
| 392 | 392 |
break; |
| 393 | 393 |
|
| 394 |
+ case 'i': |
|
| 395 |
+ moption.iaddr.sin_addr.s_addr = inet_addr(optarg); |
|
| 396 |
+ break; |
|
| 397 |
+ |
|
| 394 | 398 |
case 'l': |
| 395 | 399 |
moption.laddr.sin_addr.s_addr = inet_addr(optarg); |
| 396 | 400 |
break; |
| ... | ... |
@@ -439,7 +454,7 @@ static void minit_socket() |
| 439 | 439 |
struct ip_mreq mg; |
| 440 | 440 |
struct sockaddr_in addr; |
| 441 | 441 |
mg.imr_multiaddr.s_addr = moption.maddr.sin_addr.s_addr; |
| 442 |
- mg.imr_interface.s_addr = INADDR_ANY; |
|
| 442 |
+ mg.imr_interface.s_addr = moption.iaddr.sin_addr.s_addr; |
|
| 443 | 443 |
addr.sin_family = AF_INET; |
| 444 | 444 |
addr.sin_port = moption.maddr.sin_port; |
| 445 | 445 |
addr.sin_addr.s_addr = INADDR_ANY; |
| ... | ... |
@@ -653,6 +668,7 @@ static void minit_bootlog() |
| 653 | 653 |
lprintf(0, "base dir : %s\n", moption.base_dir); |
| 654 | 654 |
} |
| 655 | 655 |
lprintf(0, "multicast : %s\n", inet_ntoa(moption.maddr.sin_addr)); |
| 656 |
+ lprintf(0, "interface : %s\n", inet_ntoa(moption.iaddr.sin_addr)); |
|
| 656 | 657 |
lprintf(0, "port : %d\n", ntohs(moption.maddr.sin_port)); |
| 657 | 658 |
lprintf(0, "uid : %d(%s)\n", moption.uid, moption.user_name); |
| 658 | 659 |
lprintf(0, "gid : %d(%s)" , moption.gid, moption.group_name); |