Remove unused variables.
[l2tpns.git] / l2tpns.c
index 581198d..dc87ad8 100644 (file)
--- a/l2tpns.c
+++ b/l2tpns.c
@@ -30,7 +30,7 @@ char const *cvs_id_l2tpns = "$Id: l2tpns.c,v 1.176 2011/01/20 12:48:40 bodea Exp
 #include <sys/time.h>
 #include <sys/resource.h>
 #include <sys/wait.h>
-#include <linux/if.h>
+#include <net/if.h>
 #include <stddef.h>
 #include <time.h>
 #include <dlfcn.h>
@@ -446,13 +446,17 @@ static void routeset(sessionidt s, in_addr_t ip, int prefixlen, in_addr_t gw, in
                req.nh.nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE | NLM_F_REPLACE;
        }
        else
+       {
                req.nh.nlmsg_type = RTM_DELROUTE;
+               req.nh.nlmsg_flags = NLM_F_REQUEST;
+       }
+
        req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(req.rt));
 
        req.rt.rtm_family = AF_INET;
        req.rt.rtm_dst_len = prefixlen;
        req.rt.rtm_table = RT_TABLE_MAIN;
-       req.rt.rtm_protocol = RTPROT_BOOT; // XXX
+       req.rt.rtm_protocol = 42;
        req.rt.rtm_scope = RT_SCOPE_LINK;
        req.rt.rtm_type = RTN_UNICAST;
 
@@ -465,7 +469,7 @@ static void routeset(sessionidt s, in_addr_t ip, int prefixlen, in_addr_t gw, in
                netlink_addattr(&req.nh, RTA_GATEWAY, &n_ip, sizeof(n_ip));
        }
 
-       LOG(1, s, 0, "Route %s %s/%d%s%s\n", add ? "add" : "del",
+       LOG(1, s, session[s].tunnel, "Route %s %s/%d%s%s\n", add ? "add" : "del",
            fmtaddr(htonl(ip), 0), prefixlen,
            gw ? " via" : "", gw ? fmtaddr(htonl(gw), 2) : "");
 
@@ -521,13 +525,17 @@ void route6set(sessionidt s, struct in6_addr ip, int prefixlen, int add)
                req.nh.nlmsg_flags = NLM_F_REQUEST | NLM_F_CREATE | NLM_F_REPLACE;
        }
        else
+       {
                req.nh.nlmsg_type = RTM_DELROUTE;
+               req.nh.nlmsg_flags = NLM_F_REQUEST;
+       }
+
        req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(req.rt));
 
        req.rt.rtm_family = AF_INET6;
        req.rt.rtm_dst_len = prefixlen;
        req.rt.rtm_table = RT_TABLE_MAIN;
-       req.rt.rtm_protocol = RTPROT_BOOT; // XXX
+       req.rt.rtm_protocol = 42;
        req.rt.rtm_scope = RT_SCOPE_LINK;
        req.rt.rtm_type = RTN_UNICAST;
 
@@ -536,7 +544,7 @@ void route6set(sessionidt s, struct in6_addr ip, int prefixlen, int add)
        metric = 1;
        netlink_addattr(&req.nh, RTA_METRICS, &metric, sizeof(metric));
 
-       LOG(1, 0, 0, "Route %s %s/%d\n",
+       LOG(1, s, session[s].tunnel, "Route %s %s/%d\n",
            add ? "add" : "del",
            inet_ntop(AF_INET6, &ip, ipv6addr, INET6_ADDRSTRLEN),
            prefixlen);
@@ -648,7 +656,6 @@ static char *tun_nl_phase_msg[] = {
 // Set up TUN interface
 static void inittun(void)
 {
-       struct ifinfomsg ifinfo;
        struct ifreq ifr;
 
        memset(&ifr, 0, sizeof(ifr));
@@ -672,41 +679,13 @@ static void inittun(void)
        assert(strlen(ifr.ifr_name) < sizeof(config->tundevice) - 1);
        strncpy(config->tundevice, ifr.ifr_name, sizeof(config->tundevice));
 
+       tunidx = if_nametoindex(config->tundevice);
+       if (tunidx == 0)
        {
-               // get the interface index
-               struct {
-                       struct nlmsghdr nh;
-                       struct ifinfomsg ifinfo;
-               } req;
-               char buf[4096];
-               ssize_t len;
-               struct nlmsghdr *resp_nh;
-
-               req.nh.nlmsg_type = RTM_GETLINK;
-               req.nh.nlmsg_flags = NLM_F_REQUEST;
-               req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(req.ifinfo));
-
-               req.ifinfo.ifi_family = AF_UNSPEC; // as the man says
-
-               netlink_addattr(&req.nh, IFLA_IFNAME, config->tundevice, strlen(config->tundevice)+1);
-
-               if(netlink_send(&req.nh) < 0 || (len = netlink_recv(buf, sizeof(buf))) < 0)
-               {
-                       LOG(0, 0, 0, "Error getting tun ifindex: %s\n", strerror(errno));
-                       exit(1);
-               }
-
-               resp_nh = (struct nlmsghdr *)buf;
-               if (!NLMSG_OK (resp_nh, len))
-               {
-                       LOG(0, 0, 0, "Malformed answer getting tun ifindex %ld\n", len);
-                       exit(1);
-               }
-
-               memcpy(&ifinfo, NLMSG_DATA(resp_nh), sizeof(ifinfo));
-               // got index
-               tunidx = ifinfo.ifi_index;
+               LOG(0, 0, 0, "Can't get tun interface index\n");
+               exit(1);
        }
+
        {
                struct {
                        // interface setting
@@ -722,11 +701,12 @@ static void inittun(void)
 
                memset(&req, 0, sizeof(req));
 
-               req.nh.nlmsg_type = RTM_SETLINK;
+               req.nh.nlmsg_type = RTM_NEWLINK;
                req.nh.nlmsg_flags = NLM_F_REQUEST | NLM_F_MULTI;
                req.nh.nlmsg_len = NLMSG_LENGTH(sizeof(req.ifmsg.ifinfo));
 
-               req.ifmsg.ifinfo = ifinfo;
+               req.ifmsg.ifinfo.ifi_family = AF_UNSPEC;
+               req.ifmsg.ifinfo.ifi_index = tunidx;
                req.ifmsg.ifinfo.ifi_flags |= IFF_UP; // set interface up
                req.ifmsg.ifinfo.ifi_change = IFF_UP; // only change this flag
 
@@ -749,7 +729,7 @@ static void inittun(void)
                req.ifmsg.ifaddr.ifa_family = AF_INET;
                req.ifmsg.ifaddr.ifa_prefixlen = 32;
                req.ifmsg.ifaddr.ifa_scope = RT_SCOPE_UNIVERSE;
-               req.ifmsg.ifaddr.ifa_index = ifinfo.ifi_index;
+               req.ifmsg.ifaddr.ifa_index = tunidx;
 
                if (config->bind_address)
                        ip = config->bind_address;
@@ -773,7 +753,7 @@ static void inittun(void)
                        req.ifmsg.ifaddr.ifa_family = AF_INET6;
                        req.ifmsg.ifaddr.ifa_prefixlen = 64;
                        req.ifmsg.ifaddr.ifa_scope = RT_SCOPE_LINK;
-                       req.ifmsg.ifaddr.ifa_index = ifinfo.ifi_index;
+                       req.ifmsg.ifaddr.ifa_index = tunidx;
 
                        // Link local address is FE80::1
                        memset(&ip6, 0, sizeof(ip6));
@@ -794,7 +774,7 @@ static void inittun(void)
                        req.ifmsg.ifaddr.ifa_family = AF_INET6;
                        req.ifmsg.ifaddr.ifa_prefixlen = 64;
                        req.ifmsg.ifaddr.ifa_scope = RT_SCOPE_UNIVERSE;
-                       req.ifmsg.ifaddr.ifa_index = ifinfo.ifi_index;
+                       req.ifmsg.ifaddr.ifa_index = tunidx;
 
                        // Global address is prefix::1
                        ip6 = config->ipv6_prefix;
@@ -1685,7 +1665,6 @@ static void send_ipout(sessionidt s, uint8_t *buf, int len)
 {
        sessiont *sp;
        tunnelidt t;
-       in_addr_t ip;
 
        uint8_t b[MAXETHER + 20];
 
@@ -1699,8 +1678,6 @@ static void send_ipout(sessionidt s, uint8_t *buf, int len)
        buf += 4;
        len -= 4;
 
-       ip = *(in_addr_t *)(buf + 16);
-
        if (!session[s].ip)
                return;
 
@@ -2979,7 +2956,7 @@ void processudp(uint8_t *buf, int len, struct sockaddr_in *addr)
 
                                        // Set multilink options before sending initial LCP packet
                                        sess_local[s].mp_mrru = 1614;
-                                       sess_local[s].mp_epdis = config->bind_address ? config->bind_address : my_address;
+                                       sess_local[s].mp_epdis = ntohl(config->bind_address ? config->bind_address : my_address);
 
                                        sendlcp(s, t);
                                        change_state(s, lcp, RequestSent);
@@ -4314,14 +4291,9 @@ static void initdata(int optdebug, char *optconfig)
 
        if (!*hostname)
        {
-               if (!*config->hostname)
-               {
-                       // Grab my hostname unless it's been specified
-                       gethostname(hostname, sizeof(hostname));
-                       stripdomain(hostname);
-               }
-               else
-                       strcpy(hostname, config->hostname);
+               // Grab my hostname unless it's been specified
+               gethostname(hostname, sizeof(hostname));
+               stripdomain(hostname);
        }
 
        _statistics->start_time = _statistics->last_reset = time(NULL);
@@ -4736,8 +4708,12 @@ int main(int argc, char *argv[])
        initplugins();
        initdata(optdebug, optconfig);
 
-       init_cli(hostname);
+       init_cli();
        read_config_file();
+       /* set hostname /after/ having read the config file */
+       if (*config->hostname)
+               strcpy(hostname, config->hostname);
+       cli_init_hostname(hostname);
        update_config();
        init_tbf(config->num_tbfs);