merge from multibind
authorfendo <fendo@bi12info.com>
Wed, 6 Mar 2013 23:45:05 +0000 (00:45 +0100)
committerfendo <fendo@bi12info.com>
Wed, 6 Mar 2013 23:45:05 +0000 (00:45 +0100)
1  2 
Makefile
cli.c
cluster.c
l2tplac.c
l2tpns.c
l2tpns.h
ppp.c
pppoe.c
radius.c
util.c

diff --cc Makefile
+++ b/Makefile
@@@ -26,7 -26,7 +26,7 @@@ INSTALL = install -c -D -o root -g roo
  l2tpns.LIBS = -lm -lcli -ldl
  
  OBJS = arp.o cli.o cluster.o constants.o control.o icmp.o l2tpns.o \
-     ll.o md5.o ppp.o radius.o tbf.o util.o pppoe.o grpsess.o
 -    ll.o md5.o ppp.o radius.o tbf.o util.o pppoe.o l2tplac.o
++    ll.o md5.o ppp.o radius.o tbf.o util.o pppoe.o l2tplac.o grpsess.o
  
  PROGRAMS = l2tpns nsctl
  PLUGINS = autosnoop.so autothrottle.so garden.so sessionctl.so \
@@@ -129,9 -126,8 +126,9 @@@ radius.o: radius.c md5.h constants.h l2
  tbf.o: tbf.c l2tpns.h util.h tbf.h
  util.o: util.c l2tpns.h bgp.h
  pppoe.o: pppoe.c l2tpns.h cluster.h constants.h md5.h util.h
+ l2tplac.o: l2tplac.c md5.h l2tpns.h util.h cluster.h l2tplac.h pppoe.h
 +grpsess.o: grpsess.c l2tpns.h util.h bgp.h
  bgp.o: bgp.c l2tpns.h bgp.h util.h
- l2tplac.o: l2tplac.c md5.h l2tpns.h util.h cluster.h l2tplac.h pppoe.h
  autosnoop.so: autosnoop.c l2tpns.h plugin.h
  autothrottle.so: autothrottle.c l2tpns.h plugin.h
  garden.so: garden.c l2tpns.h plugin.h control.h
diff --cc cli.c
--- 1/cli.c
--- 2/cli.c
+++ b/cli.c
@@@ -158,11 -152,8 +154,9 @@@ void init_cli(
        cli_register_command(cli, c, "pool", cmd_show_pool, PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "Show the IP address allocation pool");
        cli_register_command(cli, c, "radius", cmd_show_radius, PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "Show active radius queries");
        cli_register_command(cli, c, "running-config", cmd_show_run, PRIVILEGE_PRIVILEGED, MODE_EXEC, "Show the currently running configuration");
- #ifdef LAC
        cli_register_command(cli, c, "remotelns-conf", cmd_show_rmtlnsconf, PRIVILEGE_PRIVILEGED, MODE_EXEC, "Show a list of remote LNS configuration");
- #endif
        cli_register_command(cli, c, "session", cmd_show_session, PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "Show a list of sessions or details for a single session");
 +      cli_register_command(cli, c, "group", cmd_show_group, PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "Show a list of groups or details for a single group");
        cli_register_command(cli, c, "tbf", cmd_show_tbf, PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "List all token bucket filters in use");
        cli_register_command(cli, c, "throttle", cmd_show_throttle, PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "List all throttled sessions and associated TBFs");
        cli_register_command(cli, c, "tunnels", cmd_show_tunnels, PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "Show a list of tunnels or details for a single tunnel");
@@@ -3147,79 -3110,6 +3113,77 @@@ static int cmd_reload(struct cli_def *c
        return CLI_OK;
  }
  
- #ifdef LAC
 +static int cmd_show_group(struct cli_def *cli, char *command, char **argv, int argc)
 +{
 +      int i;
 +      groupidt g;
 +
 +      if (CLI_HELP_REQUESTED)
 +              return cli_arg_help(cli, 1,
 +                      "<1-%d>", MAXGROUPE-1, "Show specific group by id",
 +                      NULL);
 +
 +      time(&time_now);
 +      if (argc > 0)
 +      {
 +              // Show individual group
 +              for (i = 0; i < argc; i++)
 +              {
 +                      sessionidt s;
 +
 +                      g = atoi(argv[i]);
 +                      if (g <= 0 || g >= MAXGROUPE)
 +                      {
 +                              cli_print(cli, "Invalid group id \"%s\"", argv[i]);
 +                              continue;
 +                      }
 +
 +                      cli_print(cli, "\r\nGroup %d:", g);
 +                      cli_print(cli, "\tNb Session:\t\t%d", grpsession[g].nbsession);
 +                      cli_print(cli, "\tNb Routes:\t\t%d", grpsession[g].nbroutesgrp);
 +                      cli_print(cli, "\ttime_changed:\t\t%d\n", grpsession[g].time_changed);
 +
 +                      for (i = 0; i < grpsession[g].nbsession; i++)
 +                      {
 +                              if ((s = grpsession[g].sesslist[i].sid))
 +                              {
 +                                      cli_print(cli, "\tSession:\t%d\tTx Rate:%d Kbps\t\t\tweight:\t%d",
 +                                                              s,
 +                                                              grpsession[g].sesslist[i].tx_rate/(1024/8),
 +                                                              grpsession[g].sesslist[i].weight);
 +                              }
 +                      }
 +
 +                      for (i = 0; i < grpsession[g].nbroutesgrp; i++)
 +                      {
 +                              if (grpsession[g].route[i].ip != 0)
 +                              {
 +                                      cli_print(cli, "\tRoute:\t%s/%d", fmtaddr(htonl(grpsession[g].route[i].ip), 0), grpsession[g].route[i].prefixlen);
 +                              }
 +                      }
 +              }
 +              return CLI_OK;
 +      }
 +
 +      // Show Summary
 +      cli_print(cli, "%5s %7s %9s %12s",
 +                      "GID",
 +                      "Nb Sess",
 +                      "Nb Routes",
 +                      "Time changed");
 +
 +      for (g = gnextgrpid; g != 0; g = grpsession[g].prev)
 +      {
 +              cli_print(cli, "%5d %7d %9d %12d",
 +                                      g,
 +                                      grpsession[g].nbsession,
 +                                      grpsession[g].nbroutesgrp,
 +                                      grpsession[g].time_changed);
 +      }
 +
 +      return CLI_OK;
 +}
 +
  static int cmd_setforward(struct cli_def *cli, char *command, char **argv, int argc)
  {
        int ret;
diff --cc cluster.c
Simple merge
diff --cc l2tplac.c
Simple merge
diff --cc l2tpns.c
+++ b/l2tpns.c
@@@ -189,7 -184,7 +181,8 @@@ config_descriptt config_values[] = 
        CONFIG("pppoe_ac_name", pppoe_ac_name, STRING),
        CONFIG("disable_sending_hello", disable_sending_hello, BOOL),
        CONFIG("disable_no_spoof", disable_no_spoof, BOOL),
+       CONFIG("bind_multi_address", bind_multi_address, STRING),
 +      CONFIG("grp_txrate_average_time", grp_txrate_average_time, INT),
        { NULL, 0, 0, 0 }
  };
  
@@@ -2309,15 -2303,8 +2330,14 @@@ void sessionkill(sessionidt s, char *re
                        sessionshutdown(sess, reason, CDN_ADMIN_DISC, TERM_ADMIN_RESET);
                }
        }
- #endif
  
        LOG(2, s, session[s].tunnel, "Kill session %d (%s): %s\n", s, session[s].user, reason);
 +
 +      if ((g = grp_groupbysession(s)))
 +      {
 +              grp_removesession(g, s);
 +      }
 +
        sessionclear(s);
        cluster_send_session(s);
  }
@@@ -4692,11 -4632,7 +4665,9 @@@ static void initdata(int optdebug, cha
        }
  #endif /* BGP */
  
- #ifdef LAC
        lac_initremotelnsdata();
- #endif
 +
 +      grp_initdata();
  }
  
  static int assign_ip_address(sessionidt s)
diff --cc l2tpns.h
+++ b/l2tpns.h
@@@ -327,15 -329,9 +334,9 @@@ typedef struc
        char class[MAXCLASS];
        uint8_t ipv6prefixlen;          // IPv6 route prefix length
        struct in6_addr ipv6route;      // Static IPv6 route
- #ifdef LAC
        sessionidt forwardtosession;    // LNS id_session to forward
        uint8_t src_hwaddr[ETH_ALEN];   // MAC addr source (for pppoe sessions 6 bytes)
 -      char reserved[4];               // Space to expand structure without changing HB_VERSION
 +      uint32_t coutgrp_delta;
- #else
-       uint8_t src_hwaddr[ETH_ALEN];   // MAC addr source (for pppoe sessions 6 bytes)
-       uint32_t coutgrp_delta;
-       char reserved[2];               // Space to expand structure without changing HB_VERSION
- #endif
  }
  sessiont;
  
@@@ -811,7 -775,12 +807,13 @@@ typedef struc
        uint8_t pppoe_hwaddr[ETH_ALEN]; // MAC addr of interface pppoe to bind
        int disable_sending_hello; // Disable l2tp sending HELLO message for Apple compatibility.
        int disable_no_spoof; // Disable no spoof (permit load balancing client --> internet)
+       int nbudpfd; // number UDP file handle
+       int nbmultiaddress; // number multi address to bind
+       int indexlacudpfd;      // Index UDP LAC file handle (in udpfd[])
+       in_addr_t bind_n_address[MAX_BINDADDR];
+       in_addr_t iftun_n_address[MAX_BINDADDR];
+       char bind_multi_address[256];
 +      int grp_txrate_average_time; // caculation txrate average time (default 10s)
  } configt;
  
  enum config_typet { INT, STRING, UNSIGNED_LONG, SHORT, BOOL, IPv4, IPv6 };
@@@ -977,28 -944,12 +977,26 @@@ int ip_filter(uint8_t *buf, int len, ui
  int cmd_show_ipcache(struct cli_def *cli, char *command, char **argv, int argc);
  int cmd_show_hist_idle(struct cli_def *cli, char *command, char **argv, int argc);
  int cmd_show_hist_open(struct cli_def *cli, char *command, char **argv, int argc);
- #ifdef LAC
 +void netlink_addattr(struct nlmsghdr *nh, int type, const void *data, int alen);
 +ssize_t netlink_send(struct nlmsghdr *nh);
 +void cache_ipmap(in_addr_t ip, sessionidt s);
 +
  tunnelidt lac_new_tunnel();
  void lac_tunnelclear(tunnelidt t);
  void lac_send_SCCRQ(tunnelidt t, uint8_t * auth, unsigned int auth_len);
  void lac_send_ICRQ(tunnelidt t, sessionidt s);
  void lac_tunnelshutdown(tunnelidt t, char *reason, int result, int error, char *msg);
- #endif
  
 +// grpsess.c
 +sessionidt grp_getnextsession(groupidt g, in_addr_t ip);
 +void grp_initdata(void);
 +void grp_processvendorspecific(sessionidt s, uint8_t *pvs);
 +groupidt grp_groupbysession(sessionidt s);
 +groupidt grp_groupbyip(in_addr_t ip);
 +void grp_setgrouproute(groupidt g, int add);
 +void grp_time_changed(void);
 +void grp_removesession(groupidt g, sessionidt s);
 +
  #undef LOG
  #undef LOG_HEX
  #define LOG(D, s, t, f, ...)  ({ if (D <= config->debug) _log(D, s, t, f, ## __VA_ARGS__); })
diff --cc ppp.c
Simple merge
diff --cc pppoe.c
Simple merge
diff --cc radius.c
Simple merge
diff --cc util.c
Simple merge