]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
iptv: provide list of network interfaces
authorSven Wegener <sven.wegener@stealer.net>
Wed, 11 Nov 2015 14:58:33 +0000 (15:58 +0100)
committerJaroslav Kysela <perex@perex.cz>
Sat, 14 Nov 2015 08:15:04 +0000 (09:15 +0100)
Signed-off-by: Sven Wegener <sven.wegener@stealer.net>
configure
src/input/mpegts/iptv/iptv_mux.c
src/tvheadend.h
src/utils.c

index 4bea36ac32cdc6f3436d4c24e6039ae46fe7a6c3..99adb40858ead54162147d9c7d5d2b5cdef91620 100755 (executable)
--- a/configure
+++ b/configure
@@ -251,6 +251,16 @@ if enabled_or_auto dvben50221; then
   fi
 fi
 
+check_cc_snippet ifnames '
+#include <net/if.h>
+int test(void)
+{
+  struct if_nameindex *ifnames = if_nameindex();
+  if_freenameindex(ifnames);
+  return 0;
+}
+'
+
 #
 # Python
 #
index c13892ad802f7f8e06a8a836c057c650064a9b03..6ae07704eaee98b9d6b5c3429ebf3951f9234387 100644 (file)
@@ -152,6 +152,7 @@ const idclass_t iptv_mux_class =
       .id       = "iptv_interface",
       .name     = N_("Interface"),
       .off      = offsetof(iptv_mux_t, mm_iptv_interface),
+      .list     = network_interfaces_enum,
     },
     {
       .type     = PT_BOOL,
index d06a858a184579da269cfb2535b94b32c427d1d1..e8b749ac7c938639488a6697e562e8e90fe18aab 100644 (file)
@@ -783,6 +783,8 @@ static inline uint32_t deltaU32(uint32_t a, uint32_t b) { return (a > b) ? (a -
 #define SKEL_USED(name) do { name = NULL; } while (0)
 #define SKEL_FREE(name) do { free(name); name = NULL; } while (0)
 
+htsmsg_t *network_interfaces_enum(void *obj, const char *lang);
+
 /* glibc wrapper */
 #if ! ENABLE_QSORT_R
 void
index be39c4e62eca522ed7126aab0dd5b708e1f6ad58..850e28de838aff642eb4b793685c7a684a9b141e 100644 (file)
@@ -26,6 +26,7 @@
 #include <dirent.h>
 #include <unistd.h>
 #include <ctype.h>
+#include <net/if.h>
 
 #include <openssl/sha.h>
 
@@ -774,3 +775,26 @@ gcdU32(uint32_t a, uint32_t b)
     return b;
   }
 }
+
+htsmsg_t *network_interfaces_enum(void *obj, const char *lang)
+{
+#if ENABLE_IFNAMES
+  htsmsg_t *list = htsmsg_create_list();
+  struct if_nameindex *ifnames = if_nameindex();
+
+  if (ifnames) {
+    struct if_nameindex *ifname;
+    for (ifname = ifnames; ifname->if_name; ifname++) {
+      htsmsg_t *entry = htsmsg_create_map();
+      htsmsg_add_str(entry, "key", ifname->if_name);
+      htsmsg_add_str(entry, "val", ifname->if_name);
+      htsmsg_add_msg(list, NULL, entry);
+    }
+    if_freenameindex(ifnames);
+  }
+
+  return list;
+#else
+  return NULL;
+#endif
+}