Introduction
Introduction Statistics Contact Development Disclaimer Help
Add support for renaming network interfaces - smdev - suckless mdev
git clone git://git.suckless.org/smdev
Log
Files
Refs
README
LICENSE
---
commit eed577a75f4e9ce9658cd83d729a561e18b39b70
parent 801a44b69bb6d791197e3cd4a442ba1cc079a4cf
Author: sin <[email protected]>
Date: Thu, 4 Sep 2014 15:04:26 +0100
Add support for renaming network interfaces
Since this is the brand new thing, add support for renaming
network interfaces in smdev. Simply populate the small mac2names[]
table in config.h.
By default smdev does not rename network interfaces. There's no
command line switch to enable renaming, just add entries to the
table and off you go.
Diffstat:
M config.def.h | 7 +++++++
M smdev.c | 48 +++++++++++++++++++++++++++++…
2 files changed, 55 insertions(+), 0 deletions(-)
---
diff --git a/config.def.h b/config.def.h
@@ -40,3 +40,10 @@ struct rule {
{ "fuse", "root", "root", 0666, NULL, NULL …
{ ".*", "root", "root", 0660, NULL, NULL …
};
+
+struct mac2name {
+ unsigned char mac[6];
+ const char *name;
+} mac2names[] = {
+ { .mac = { 0 }, .name = NULL }
+};
diff --git a/smdev.c b/smdev.c
@@ -1,7 +1,13 @@
/* See LICENSE file for copyright and license details. */
+#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/types.h>
+#include <linux/if_packet.h>
+#include <net/if.h>
+#include <netinet/in.h>
+#include <ifaddrs.h>
+
#include <errno.h>
#include <fcntl.h>
#include <grp.h>
@@ -55,6 +61,7 @@ static int createdev(struct event *ev);
static int doevent(struct event *ev);
static int craftev(char *sysfspath);
static void populatedev(const char *path);
+static int ifrename(void);
static void
usage(void)
@@ -88,6 +95,8 @@ main(int argc, char *argv[])
if (pregcache[i].cached)
regfree(&pregcache[i].preg);
+ ifrename();
+
return 0;
}
@@ -386,3 +395,42 @@ populatedev(const char *path)
free(cwd);
}
}
+
+static int
+ifrename(void)
+{
+ struct ifaddrs *ifas, *ifa;
+ struct ifreq ifr;
+ int sd;
+ int i;
+ int r;
+
+ sd = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
+ if (sd < 0)
+ eprintf("socket:");
+ r = getifaddrs(&ifas);
+ if (r < 0)
+ eprintf("getifaddrs:");
+ for (ifa = ifas; ifa; ifa = ifa->ifa_next) {
+ if (ifa->ifa_flags & IFF_LOOPBACK)
+ continue;
+ if (ifa->ifa_addr->sa_family == AF_PACKET) {
+ struct sockaddr_ll *sa = (struct sockaddr_ll *)ifa->if…
+ for (i = 0; mac2names[i].name; i++) {
+ if (memcmp(mac2names[i].mac, sa->sll_addr, 6) …
+ continue;
+ memset(&ifr, 0, sizeof(ifr));
+ strlcpy(ifr.ifr_name,
+ ifa->ifa_name, sizeof(ifr.ifr_name));
+ strlcpy(ifr.ifr_newname,
+ mac2names[i].name, sizeof(ifr.ifr_newn…
+ r = ioctl(sd, SIOCSIFNAME, &ifr);
+ if (r < 0)
+ eprintf("SIOCSIFNAME:");
+ }
+ }
+ }
+
+ close(sd);
+ return 0;
+}
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.