ctdb-common: Move ctdb_system_check_iface_exists() to system.[ch]
authorMartin Schwenke <martin@meltin.net>
Thu, 28 Jun 2018 10:30:32 +0000 (20:30 +1000)
committerMartin Schwenke <martins@samba.org>
Mon, 2 Jul 2018 06:51:21 +0000 (08:51 +0200)
The system_<os>.c files contain a lot of duplication, making
maintenance difficult.  These functions are being merged into
system_socket.[ch] and system.[ch].

This function doesn't need ctdb_sock_addr so put it with general
system utilities.

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
ctdb/common/system.c
ctdb/common/system.h
ctdb/common/system_aix.c
ctdb/common/system_freebsd.c
ctdb/common/system_gnu.c
ctdb/common/system_kfreebsd.c
ctdb/common/system_linux.c
ctdb/tests/cunit/porting_tests_001.sh

index 53480dd0d6ce57e87e0a52d213dd4e603fded57d..50054f0abc65879ea0e27673fbad436a8799f6bd 100644 (file)
@@ -163,3 +163,38 @@ void ctdb_wait_for_process_to_exit(pid_t pid)
                sleep(5);
        }
 }
+
+#ifdef HAVE_AF_PACKET
+
+bool ctdb_sys_check_iface_exists(const char *iface)
+{
+       int s;
+       struct ifreq ifr;
+
+       s = socket(AF_PACKET, SOCK_RAW, 0);
+       if (s == -1){
+               /* We don't know if the interface exists, so assume yes */
+               DBG_ERR("Failed to open raw socket\n");
+               return true;
+       }
+
+       strlcpy(ifr.ifr_name, iface, sizeof(ifr.ifr_name));
+       if (ioctl(s, SIOCGIFINDEX, &ifr) < 0 && errno == ENODEV) {
+               DBG_ERR("Interface '%s' not found\n", iface);
+               close(s);
+               return false;
+       }
+       close(s);
+
+       return true;
+}
+
+#else /* HAVE_AF_PACKET */
+
+bool ctdb_sys_check_iface_exists(const char *iface)
+{
+       /* Not implemented: Interface always considered present */
+       return true;
+}
+
+#endif /* HAVE_AF_PACKET */
index 9fd8c225e6f45b87076e9411f39c3a865e870b7f..908d29d27946c8f69ec2483274bdf3fef141d31b 100644 (file)
@@ -34,7 +34,6 @@ int ctdb_sys_read_tcp_packet(int s, void *private_data,
                             ctdb_sock_addr *src, ctdb_sock_addr *dst,
                             uint32_t *ack_seq, uint32_t *seq,
                             int *rst, uint16_t *window);
-bool ctdb_sys_check_iface_exists(const char *iface);
 int ctdb_get_peer_pid(const int fd, pid_t *peer_pid);
 
 /* From system_util.c */
@@ -48,4 +47,6 @@ void mkdir_p_or_die(const char *dir, int mode);
 
 void ctdb_wait_for_process_to_exit(pid_t pid);
 
+bool ctdb_sys_check_iface_exists(const char *iface);
+
 #endif /* __CTDB_SYSTEM_H__ */
index f4c5c70014190b535e0d2e6a5f256bdfb69bb6f5..f17125cbd394d1146af8ed2669bcdcecfcced70c 100644 (file)
@@ -380,13 +380,6 @@ int ctdb_sys_read_tcp_packet(int s, void *private_data,
        return -1;
 }
 
-
-bool ctdb_sys_check_iface_exists(const char *iface)
-{
-       /* FIXME AIX: Interface always considered present */
-       return true;
-}
-
 int ctdb_get_peer_pid(const int fd, pid_t *peer_pid)
 {
        struct peercred_struct cr;
index 5614e1014d803a007e20df0f76487b316978b294..de7bf2b33963e1a9a8f3464f83027c1a8e87f913 100644 (file)
@@ -384,12 +384,6 @@ int ctdb_sys_read_tcp_packet(int s, void *private_data,
        return -1;
 }
 
-bool ctdb_sys_check_iface_exists(const char *iface)
-{
-       /* FIXME FreeBSD: Interface always considered present */
-       return true;
-}
-
 int ctdb_get_peer_pid(const int fd, pid_t *peer_pid)
 {
        /* FIXME FreeBSD: get_peer_pid not implemented */
index 27339d18c3e4d1ef4ee6a6a44c77fe27b5a6258d..7f2654e61d757333c91e01cb6de8d1678a1964ea 100644 (file)
@@ -379,12 +379,6 @@ int ctdb_sys_read_tcp_packet(int s, void *private_data,
        return -1;
 }
 
-bool ctdb_sys_check_iface_exists(const char *iface)
-{
-       /* FIXME GNU/Hurd: Interface always considered present */
-       return true;
-}
-
 int ctdb_get_peer_pid(const int fd, pid_t *peer_pid)
 {
        /* FIXME GNU/Hurd: get_peer_pid not implemented */
index 67c2aa060434c2e6a183379c38bba4f072c46d44..ccad294615d78922900115e3d7e3bc67433e576c 100644 (file)
@@ -379,12 +379,6 @@ int ctdb_sys_read_tcp_packet(int s, void *private_data,
        return -1;
 }
 
-bool ctdb_sys_check_iface_exists(const char *iface)
-{
-       /* FIXME kFreeBSD: Interface always considered present */
-       return true;
-}
-
 int ctdb_get_peer_pid(const int fd, pid_t *peer_pid)
 {
        /* FIXME kFreeBSD: get_peer_pid not implemented */
index d8f53ea8ea05b46ba6325d8de0f5fd2a12080efb..3cff3b20c94a8e3f2dc7095d3e3a12f7dc030dc5 100644 (file)
@@ -604,30 +604,6 @@ int ctdb_sys_read_tcp_packet(int s, void *private_data,
        return -1;
 }
 
-
-bool ctdb_sys_check_iface_exists(const char *iface)
-{
-       int s;
-       struct ifreq ifr;
-
-       s = socket(AF_PACKET, SOCK_RAW, 0);
-       if (s == -1){
-               /* We don't know if the interface exists, so assume yes */
-               DEBUG(DEBUG_CRIT,(__location__ " failed to open raw socket\n"));
-               return true;
-       }
-
-       strlcpy(ifr.ifr_name, iface, sizeof(ifr.ifr_name));
-       if (ioctl(s, SIOCGIFINDEX, &ifr) < 0 && errno == ENODEV) {
-               DEBUG(DEBUG_CRIT,(__location__ " interface '%s' not found\n", iface));
-               close(s);
-               return false;
-       }
-       close(s);
-       
-       return true;
-}
-
 int ctdb_get_peer_pid(const int fd, pid_t *peer_pid)
 {
        struct ucred cr;
index 98a8af2d7f41d40d17b28b4bf1da843e980180f8..ba69fb95c44d90dd0360924b508dcac7f7dafbbc 100755 (executable)
@@ -11,16 +11,11 @@ remove_socket ()
 
 test_cleanup remove_socket
 
-result_filter ()
-{
-       sed -e 's|^\(\.\./common/system_linux\.c\):[0-9][0-9]*|\1:LINE|'
-}
-
 uid=$(id -u)
 if [ "$uid" -eq 0 ] ; then
-    ok "../common/system_linux.c:LINE interface 'fake' not found"
+    ok "ctdb_sys_check_iface_exists: Interface 'fake' not found"
 else
-    ok "../common/system_linux.c:LINE failed to open raw socket"
+    ok "ctdb_sys_check_iface_exists: Failed to open raw socket"
 fi
 
 unit_test porting_tests --socket=${socket}