Don't process timers of disabled peers.
[l2tpns.git] / l2tpns.c
index f966a78..f2a60c9 100644 (file)
--- a/l2tpns.c
+++ b/l2tpns.c
@@ -69,7 +69,7 @@ int rand_fd = -1;             // Random data source
 int cluster_sockfd = -1;       // Intra-cluster communications socket.
 int epollfd = -1;              // event polling
 time_t basetime = 0;           // base clock
-char hostname[1000] = "";      // us.
+char hostname[MAXHOSTNAME] = "";       // us.
 static int tunidx;             // ifr_ifindex of tun device
 static int syslog_log = 0;     // are we logging to syslog
 static FILE *log_stream = 0;   // file handle for direct logging (i.e. direct into file, not via syslog).
@@ -158,6 +158,9 @@ config_descriptt config_values[] = {
        CONFIG("cluster_master_min_adv", cluster_master_min_adv, INT),
        CONFIG("ipv6_prefix", ipv6_prefix, IPv6),
        CONFIG("cli_bind_address", cli_bind_address, IPv4),
+       CONFIG("hostname", hostname, STRING),
+       CONFIG("nexthop_address", nexthop_address, IPv4),
+       CONFIG("nexthop6_address", nexthop6_address, IPv6),
        { NULL, 0, 0, 0 },
 };
 
@@ -500,7 +503,12 @@ void route6set(sessionidt s, struct in6_addr ip, int prefixlen, int add)
                LOG(0, 0, 0, "route6set() error in ioctl: %s\n",
                                strerror(errno));
 
-       // FIXME: need to add BGP routing (RFC2858)
+#ifdef BGP
+       if (add)
+               bgp_add_route6(ip, prefixlen);
+       else
+               bgp_del_route6(ip, prefixlen);
+#endif /* BGP */
 
        if (s)
        {
@@ -3761,6 +3769,11 @@ static void mainloop(void)
                                more++;
                        }
                }
+#ifdef BGP
+               else
+                       /* no event received, but timers could still have expired */
+                       bgp_process_peers_timers();
+#endif /* BGP */
 
                if (time_changed)
                {
@@ -4068,9 +4081,14 @@ static void initdata(int optdebug, char *optconfig)
 
        if (!*hostname)
        {
-               // Grab my hostname unless it's been specified
-               gethostname(hostname, sizeof(hostname));
-               stripdomain(hostname);
+               if (!*config->hostname)
+               {
+                       // Grab my hostname unless it's been specified
+                       gethostname(hostname, sizeof(hostname));
+                       stripdomain(hostname);
+               }
+               else
+                       strcpy(hostname, config->hostname);
        }
 
        _statistics->start_time = _statistics->last_reset = time(NULL);