/* $Id: $ * $URL: $ * * plugin getting information about network devices (IPaddress, MACaddress, ...) * * Copyright (C) 2007 Volker Gering * Copyright (C) 2004, 2005, 2006, 2007 The LCD4Linux Team * * This file is part of LCD4Linux. * * LCD4Linux is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * LCD4Linux is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ /* * exported functions: * * int plugin_init_netinfo (void) * adds functions to get information about network devices * */ #include "config.h" #include #include #include #include #include "debug.h" #include "plugin.h" #include "qprintf.h" #include /* socket() */ #include /* socket() */ #include /* SIOCGIFNAME */ #include /* ifreq{} */ #include /* errno */ #include /* inet_ntoa() */ #include /* inet_ntoa() */ /* socket descriptor: * -2 initial state * -1 error: message not printed * -3 error: message printed, deactivate plugin */ static int socknr = -2; static int open_net(void) { if (socknr == -3) return -1; if (socknr == -2) { socknr = socket(PF_INET, SOCK_DGRAM, 0); } if (socknr == -1) { error("%s: socket(PF_INET, SOCK_DGRAM, 0) failed: %s", "plugin_netinfo", strerror(errno)); error(" deactivate plugin netinfo"); socknr = -3; return -1; } return 0; } static void my_exists(RESULT * result, RESULT * arg1) { char buf[10240]; struct ifconf ifcnf; struct ifreq *ifreq; int len; double value = 0.0; // netdev doesn't exists char devname[80]; if (socknr < 0) { /* no open socket */ SetResult(&result, R_NUMBER, &value); return; } ifcnf.ifc_len = sizeof(buf); ifcnf.ifc_buf = buf; if (ioctl(socknr, SIOCGIFCONF, &ifcnf) < 0) { /* error getting list of devices */ error("%s: ioctl(IFCONF) for %s failed: %s", "plugin_netinfo", R2S(arg1), strerror(errno)); SetResult(&result, R_NUMBER, &value); return; } if (0 == ifcnf.ifc_len) { /* no interfaces found */ SetResult(&result, R_NUMBER, &value); return; } ifreq = (struct ifreq *) buf; len = sizeof(struct ifreq); strncpy(devname, R2S(arg1), sizeof(devname)); while (ifreq && *((char *) ifreq) && ((char *) ifreq) < buf + ifcnf.ifc_len) { if (*((char *) ifreq) && strncmp(ifreq->ifr_name, devname, sizeof(devname)) == 0) { /* found */ value = 1.0; SetResult(&result, R_NUMBER, &value); return; } (*(char **) &ifreq) += len; } /* device doesn't exists */ SetResult(&result, R_NUMBER, &value); } /* get MAC address (hardware address) of network device */ static void my_hwaddr(RESULT * result, RESULT * arg1) { static int errcount = 0; struct ifreq ifreq; unsigned char *hw; char value[18]; if (socknr < 0) { /* no open socket */ SetResult(&result, R_STRING, ""); return; } strncpy(ifreq.ifr_name, R2S(arg1), sizeof(ifreq.ifr_name)); if (ioctl(socknr, SIOCGIFHWADDR, &ifreq) < 0) { errcount++; if (1 == errcount % 1000) { error("%s: ioctl(IFHWADDR %s) failed: %s", "plugin_netinfo", ifreq.ifr_name, strerror(errno)); error(" (skip next 1000 errors)"); } SetResult(&result, R_STRING, ""); return; } hw = (unsigned char *) ifreq.ifr_hwaddr.sa_data; qprintf(value, sizeof(value), "%02x:%02x:%02x:%02x:%02x:%02x", *hw, *(hw + 1), *(hw + 2), *(hw + 3), *(hw + 4), *(hw + 5)); SetResult(&result, R_STRING, value); } /* get ip address of network device */ static void my_ipaddr(RESULT * result, RESULT * arg1) { static int errcount = 0; struct ifreq ifreq; struct sockaddr_in *sin; char value[16]; if (socknr < 0) { /* no open socket */ SetResult(&result, R_STRING, ""); return; } strncpy(ifreq.ifr_name, R2S(arg1), sizeof(ifreq.ifr_name)); if (ioctl(socknr, SIOCGIFADDR, &ifreq) < 0) { errcount++; if (1 == errcount % 1000) { error("%s: ioctl(IFADDR %s) failed: %s", "plugin_netinfo", ifreq.ifr_name, strerror(errno)); error(" (skip next 1000 errors)"); } SetResult(&result, R_STRING, ""); return; } sin = (struct sockaddr_in *) &ifreq.ifr_addr; qprintf(value, sizeof(value), "%s", inet_ntoa(sin->sin_addr)); SetResult(&result, R_STRING, value); } /* get ip netmask of network device */ static void my_netmask(RESULT * result, RESULT * arg1) { static int errcount = 0; struct ifreq ifreq; struct sockaddr_in *sin; char value[16]; if (socknr < 0) { /* no open socket */ SetResult(&result, R_STRING, ""); return; } strncpy(ifreq.ifr_name, R2S(arg1), sizeof(ifreq.ifr_name)); if (ioctl(socknr, SIOCGIFNETMASK, &ifreq) < 0) { errcount++; if (1 == errcount % 1000) { error("%s: ioctl(IFNETMASK %s) failed: %s", "plugin_netinfo", ifreq.ifr_name, strerror(errno)); error(" (skip next 1000 errors)"); } SetResult(&result, R_STRING, ""); return; } sin = (struct sockaddr_in *) &ifreq.ifr_netmask; qprintf(value, sizeof(value), "%s", inet_ntoa(sin->sin_addr)); SetResult(&result, R_STRING, value); } /* get ip broadcast address of network device */ static void my_bcaddr(RESULT * result, RESULT * arg1) { static int errcount = 0; struct ifreq ifreq; struct sockaddr_in *sin; char value[16]; if (socknr < 0) { /* no open socket */ SetResult(&result, R_STRING, ""); return; } strncpy(ifreq.ifr_name, R2S(arg1), sizeof(ifreq.ifr_name)); if (ioctl(socknr, SIOCGIFBRDADDR, &ifreq) < 0) { errcount++; if (1 == errcount % 1000) { error("%s: ioctl(IFBRDADDR %s) failed: %s", "plugin_netinfo", ifreq.ifr_name, strerror(errno)); error(" (skip next 1000 errors)"); } SetResult(&result, R_STRING, ""); return; } sin = (struct sockaddr_in *) &ifreq.ifr_broadaddr; qprintf(value, sizeof(value), "%s", inet_ntoa(sin->sin_addr)); SetResult(&result, R_STRING, value); } int plugin_init_netinfo(void) { open_net(); AddFunction("netinfo::exists", 1, my_exists); AddFunction("netinfo::hwaddr", 1, my_hwaddr); AddFunction("netinfo::ipaddr", 1, my_ipaddr); AddFunction("netinfo::netmask", 1, my_netmask); AddFunction("netinfo::bcaddr", 1, my_bcaddr); return 0; } void plugin_exit_netinfo(void) { close(socknr); } an class='deletions'>-0/+0 ABS-1 appears to have replaced ABS-2 according to [0]. Lets rename it to reflect it's current name. [0] http://space.skyrocket.de/doc_sdat/abs-2.htm Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> 2018-05-10Rename Atlantic Bird 3 to Eutelsat5Olliver Schinagl1-0/+0 In 2012 Atlantic Bird 3 was renamed to Eutelsat 5 West A as can be seen at [0]. Reflect this name change in the filename to make it easier to find. [0] http://space.skyrocket.de/doc_sdat/stellat-1.htm Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> 2018-05-10Remove Atlantic Bird 1Olliver Schinagl1-270/+0 Atlantic Bird 1 was renamed to Eutelsat 12 West A in 2012 and moved from 12 to 36 degree's in 2016 and was thus not accurate anymore. In 2018 it was repositioned to 59 east and renamed to Eutelsat 59A as can be seen at [0]. So far there are no active transponders. [0] http://space.skyrocket.de/doc_sdat/atlantic-bird-1.htm Signed-off-by: Olliver Schinagl <oliver@schinagl.nl> 2018-05-10dtv-scan-tables - dvb-s - update and rename the config file for ↵leny@netcourrier.com1-53/+663 Atlantic-Bird-3-5.0W - Ku Band Hello, The latest update for the file Atlantic-Bird-3-5.0W (Ku Band) is 2015-03-28: https://git.linuxtv.org/dtv-scan-tables.git/log/dvb-s/Atlantic-Bird-3-5.0W but since March 2015 there are a lot of changes in the tranponders list. And now, a lot of transponders for Algerian, French and Italian TV and Radio channels are missing. Attached is an updated config scan file (Atlantic-Bird-3-5.0W.patch file) for Atlantic-Bird-3-5.0W transponders in dvbv5 format. Could you please ensure that this new patch is committed into the DVB source code tree repositery? PS : Attached there is also the full up to date file : Atlantic-Bird-3-5.0W-2017-01-09.NEW.FULL if you need it Thank you Best regards 2018-05-10Add another initial transponder for Ziggo/Netherlands.Jens Peters1-0/+8 Ziggo and UPC had merged, but the initial UPC transponder is still the correct one for former UPC customers. See also https://gathering.tweakers.net/forum/list_message/31632914#31632914