{"batch", no_argument, NULL, 'a'},
{"keep-broadcasting", no_argument, NULL, 'b'},
{"force-interface", no_argument, NULL, 'f'},
- {"global-broadcast", no_argument, NULL, 'g'},
{"help", no_argument, NULL, 'h'},
{"interface", required_argument, NULL, 'i'},
+ {"local-broadcast", no_argument, NULL, 'l'},
{"mac", required_argument, NULL, 'm'},
{"password", required_argument, NULL, 'p'},
{"retries", required_argument, NULL, 'r'},
char *line, *com[MAXCOM];
const char *iface = "eth0", *password = NULL;
float timeout = 0.f;
- bool kb = false, force = false, global = false;
+ bool kb = false, force = false, global = true;
struct timeval tv;
const struct TreeNode *cur, *next;
struct ether_addr *mac = NULL;
opterr = 0;
- while ((n = getopt_long(argc, argv, "abfghi:m:p:r:t:", opts, NULL)) != -1) {
+ while ((n = getopt_long(argc, argv, "abfhi:lm:p:r:t:", opts, NULL)) != -1) {
switch (n) {
case 'a':
force = true;
break;
- case 'g':
- global = true;
- break;
-
case 'h':
printf("usage: %s [-a] [-b] [-f] [-g] [-i <interface>] [-m <MAC>] [-p <password>]\n", argv[0]);
goto end;
iface = optarg;
break;
+ case 'l':
+ global = false;
+ break;
+
case 'm':
mac = ether_aton(optarg);
if (mac == NULL) {
}
- if (kb && ngadmin_setKeepBroadcasting(nga, true) != ERR_OK)
+ if (ngadmin_setKeepBroadcasting(nga, kb) != ERR_OK)
goto end;
if (force && ngadmin_forceInterface(nga) != ERR_OK)
goto end;
- if (global && ngadmin_useGlobalBroadcast(nga, true) != ERR_OK)
+ if (ngadmin_useGlobalBroadcast(nga, global) != ERR_OK)
goto end;
/* non-TTY inputs are automatically set to batch mode */
memset(&ifr, 0, sizeof(struct ifreq));
strncpy(ifr.ifr_name, nga->iface, IFNAMSIZ - 1);
-
- /* get the interface broadcast address */
- ret = ioctl(nga->sock, SIOCGIFBRDADDR, &ifr);
- if (ret < 0) {
- perror("ioctl(SIOCGIFBRDADDR)");
- close(nga->sock);
- return ret;
- }
- nga->brd = (*(struct sockaddr_in*)&ifr.ifr_addr).sin_addr;
-
+
/* get the interface MAC address */
ret = ioctl(nga->sock, SIOCGIFHWADDR, &ifr);
if (ret < 0) {
}
+int setBroadcastType (struct ngadmin *nga, bool value)
+{
+ int ret;
+ struct ifreq ifr;
+
+
+ nga->globalbroad = value;
+ if (value) {
+ nga->brd.s_addr = (in_addr_t)0;
+ return 0;
+ }
+
+ memset(&ifr, 0, sizeof(struct ifreq));
+ strncpy(ifr.ifr_name, nga->iface, IFNAMSIZ - 1);
+
+ /* get the interface broadcast address */
+ ret = ioctl(nga->sock, SIOCGIFBRDADDR, &ifr);
+ if (ret < 0) {
+ perror("ioctl(SIOCGIFBRDADDR)");
+ nga->brd.s_addr = (in_addr_t)0;
+ nga->globalbroad = true;
+ return ret;
+ }
+
+ nga->brd = (*(struct sockaddr_in*)&ifr.ifr_addr).sin_addr;
+
+ return 0;
+}
+
+
int stopNetwork (struct ngadmin *nga)
{
return close(nga->sock);