Don't hard-code interface name
Rather than hard-coding to "ncsi0", take the interface name from the
command line.
Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
diff --git a/inarp.c b/inarp.c
index d3efc4e..7a71247 100644
--- a/inarp.c
+++ b/inarp.c
@@ -110,7 +110,7 @@
return send_result;
}
-void show_mac_addr(char *name, unsigned char *mac_addr)
+void show_mac_addr(const char *name, unsigned char *mac_addr)
{
int i;
printf("%s MAC address: ", name);
@@ -208,17 +208,32 @@
return time(NULL);
}
#endif
-//query ip addr for server node w/ mac addr
-//inarp "ethX" "peer mac addr(xx:xx:xx:xx:xx:xx)"
-//inarp daemon to handle inarp packets
-//inarp "ethX" "file for storing node list"
-int main(void)
+
+static void usage(const char *progname)
+{
+ fprintf(stderr, "Usage: %s <interface>\n", progname);
+}
+
+int main(int argc, char **argv)
{
int fd, ret;
/*buffer for ethernet frame */
static unsigned char buffer[ETH_FRAME_LEN]; /* single packets are usually not bigger than 8192 bytes */
int send_result = 0;
static struct ifreq ifreq_buffer;
+ const char *ifname;
+
+ if (argc < 2) {
+ usage(argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ ifname = argv[1];
+
+ if (strlen(ifname) > IFNAMSIZ) {
+ fprintf(stderr, "Interface name '%s' is invalid\n", ifname);
+ return EXIT_FAILURE;
+ }
/*our MAC address */
static unsigned char src_mac[6];
@@ -233,7 +248,7 @@
}
//local mac address
memset(&ifreq_buffer, 0x00, sizeof(ifreq_buffer));
- strcpy(ifreq_buffer.ifr_name, "ncsi0");
+ strcpy(ifreq_buffer.ifr_name, ifname);
ret = ioctl(fd, SIOCGIFHWADDR, &ifreq_buffer);
if (ret == -1) {
printf("ioctl2: [%s]\n", strerror(errno));
@@ -241,10 +256,10 @@
exit(-1);
}
memcpy(src_mac, ifreq_buffer.ifr_hwaddr.sa_data, ETH_ALEN);
- show_mac_addr("ncsi0", src_mac);
+ show_mac_addr(ifname, src_mac);
//interface index
memset(&ifreq_buffer, 0x00, sizeof(ifreq_buffer));
- strcpy(ifreq_buffer.ifr_name, "ncsi0");
+ strcpy(ifreq_buffer.ifr_name, ifname);
ret = ioctl(fd, SIOCGIFINDEX, &ifreq_buffer);
if (ret == -1) {
printf("ioctl4: [%s]\n", strerror(errno));
@@ -265,7 +280,7 @@
while (1) {
//get local ip address
memset(&ifreq_buffer, 0x00, sizeof(ifreq_buffer));
- strcpy(ifreq_buffer.ifr_name, "ncsi0");
+ strcpy(ifreq_buffer.ifr_name, ifname);
ret = ioctl(fd, SIOCGIFADDR, &ifreq_buffer);
if (ret == -1) {
// printf("ioctl3: [%s]\n", strerror(errno));