]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network/tuntap: code cleanups
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 12 Aug 2022 22:35:21 +0000 (07:35 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 16 Aug 2022 12:49:04 +0000 (21:49 +0900)
- merge unnecessarily split functions,
- drop unnecessary initializations,
- tighten variable scopes,
- introduce TUNTAP() helper function.

src/network/netdev/tuntap.c

index 6f099a144814e1f060b3e0423802bb85ed0245df..8e9c1ca9b3fe2bd2d0fae487aea8cb64ebe8b2e8 100644 (file)
 
 #define TUN_DEV "/dev/net/tun"
 
-static int netdev_fill_tuntap_message(NetDev *netdev, struct ifreq *ifr) {
-        TunTap *t;
-
+static TunTap* TUNTAP(NetDev *netdev) {
         assert(netdev);
-        assert(netdev->ifname);
-        assert(ifr);
-
-        if (netdev->kind == NETDEV_KIND_TAP) {
-                t = TAP(netdev);
-                ifr->ifr_flags |= IFF_TAP;
-        } else {
-                t = TUN(netdev);
-                ifr->ifr_flags |= IFF_TUN;
-        }
-
-        if (!t->packet_info)
-                ifr->ifr_flags |= IFF_NO_PI;
-
-        if (t->multi_queue)
-                ifr->ifr_flags |= IFF_MULTI_QUEUE;
-
-        if (t->vnet_hdr)
-                ifr->ifr_flags |= IFF_VNET_HDR;
 
-        strncpy(ifr->ifr_name, netdev->ifname, IFNAMSIZ-1);
-
-        return 0;
+        switch (netdev->kind) {
+        case NETDEV_KIND_TAP:
+                return TAP(netdev);
+        case NETDEV_KIND_TUN:
+                return TUN(netdev);
+        default:
+                return NULL;
+        }
 }
 
-static int netdev_tuntap_add(NetDev *netdev, struct ifreq *ifr) {
+static int netdev_create_tuntap(NetDev *netdev) {
         _cleanup_close_ int fd = -1;
-        TunTap *t = NULL;
-        const char *user;
-        const char *group;
-        uid_t uid;
-        gid_t gid;
+        struct ifreq ifr = {};
+        TunTap *t;
         int r;
 
         assert(netdev);
-        assert(ifr);
+        t = TUNTAP(netdev);
+        assert(t);
 
         fd = open(TUN_DEV, O_RDWR|O_CLOEXEC);
         if (fd < 0)
-                return log_netdev_error_errno(netdev, errno,  "Failed to open tun dev: %m");
-
-        if (ioctl(fd, TUNSETIFF, ifr) < 0)
-                return log_netdev_error_errno(netdev, errno, "TUNSETIFF failed on tun dev: %m");
+                return log_netdev_error_errno(netdev, errno,  "Failed to open " TUN_DEV ": %m");
 
         if (netdev->kind == NETDEV_KIND_TAP)
-                t = TAP(netdev);
+                ifr.ifr_flags |= IFF_TAP;
         else
-                t = TUN(netdev);
+                ifr.ifr_flags |= IFF_TUN;
 
-        assert(t);
+        if (!t->packet_info)
+                ifr.ifr_flags |= IFF_NO_PI;
+
+        if (t->multi_queue)
+                ifr.ifr_flags |= IFF_MULTI_QUEUE;
+
+        if (t->vnet_hdr)
+                ifr.ifr_flags |= IFF_VNET_HDR;
+
+        strncpy(ifr.ifr_name, netdev->ifname, IFNAMSIZ-1);
+
+        if (ioctl(fd, TUNSETIFF, &ifr) < 0)
+                return log_netdev_error_errno(netdev, errno, "TUNSETIFF failed: %m");
 
         if (t->user_name) {
-                user = t->user_name;
+                const char *user = t->user_name;
+                uid_t uid;
 
                 r = get_user_creds(&user, &uid, NULL, NULL, NULL, USER_CREDS_ALLOW_MISSING);
                 if (r < 0)
                         return log_netdev_error_errno(netdev, r, "Cannot resolve user name %s: %m", t->user_name);
 
                 if (ioctl(fd, TUNSETOWNER, uid) < 0)
-                        return log_netdev_error_errno(netdev, errno, "TUNSETOWNER failed on tun dev: %m");
+                        return log_netdev_error_errno(netdev, errno, "TUNSETOWNER failed: %m");
         }
 
         if (t->group_name) {
-                group = t->group_name;
+                const char *group = t->group_name;
+                gid_t gid;
 
                 r = get_group_creds(&group, &gid, USER_CREDS_ALLOW_MISSING);
                 if (r < 0)
                         return log_netdev_error_errno(netdev, r, "Cannot resolve group name %s: %m", t->group_name);
 
                 if (ioctl(fd, TUNSETGROUP, gid) < 0)
-                        return log_netdev_error_errno(netdev, errno, "TUNSETGROUP failed on tun dev: %m");
+                        return log_netdev_error_errno(netdev, errno, "TUNSETGROUP failed: %m");
 
         }
 
         if (ioctl(fd, TUNSETPERSIST, 1) < 0)
-                return log_netdev_error_errno(netdev, errno, "TUNSETPERSIST failed on tun dev: %m");
+                return log_netdev_error_errno(netdev, errno, "TUNSETPERSIST failed: %m");
 
         return 0;
 }
 
-static int netdev_create_tuntap(NetDev *netdev) {
-        struct ifreq ifr = {};
-        int r;
-
-        r = netdev_fill_tuntap_message(netdev, &ifr);
-        if (r < 0)
-                return r;
-
-        return netdev_tuntap_add(netdev, &ifr);
-}
-
 static void tuntap_done(NetDev *netdev) {
-        TunTap *t = NULL;
+        TunTap *t;
 
         assert(netdev);
-
-        if (netdev->kind == NETDEV_KIND_TUN)
-                t = TUN(netdev);
-        else
-                t = TAP(netdev);
-
+        t = TUNTAP(netdev);
         assert(t);
 
         t->user_name = mfree(t->user_name);