Diff for /embedaddon/mpd/src/l2tp.c between versions 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2013/07/22 08:44:29 version 1.1.1.3, 2016/11/01 09:56:12
Line 28 Line 28
 #include <netgraph/ng_ksocket.h>  #include <netgraph/ng_ksocket.h>
 #include <netgraph/ng_l2tp.h>  #include <netgraph/ng_l2tp.h>
 #include <netgraph.h>  #include <netgraph.h>
   #include <fnmatch.h>
   
 /*  /*
  * DEFINITIONS   * DEFINITIONS
Line 74 Line 75
         char            hostname[MAXHOSTNAMELEN]; /* L2TP local hostname */          char            hostname[MAXHOSTNAMELEN]; /* L2TP local hostname */
         char            secret[64];     /* L2TP tunnel secret */          char            secret[64];     /* L2TP tunnel secret */
         char            *fqdn_peer_addr;        /* FQDN Peer address */          char            *fqdn_peer_addr;        /* FQDN Peer address */
           char            *peer_mask;     /* L2TP peer hostname mask */
     } conf;      } conf;
     u_char              opened;         /* L2TP opened by phys */      u_char              opened;         /* L2TP opened by phys */
     u_char              incoming;       /* Call is incoming vs. outgoing */      u_char              incoming;       /* Call is incoming vs. outgoing */
Line 94 Line 96
     SET_CALLINGNUM,      SET_CALLINGNUM,
     SET_CALLEDNUM,      SET_CALLEDNUM,
     SET_HOSTNAME,      SET_HOSTNAME,
       SET_PEERMASK,
     SET_SECRET,      SET_SECRET,
     SET_ENABLE,      SET_ENABLE,
     SET_DISABLE      SET_DISABLE
Line 209 Line 212
         L2tpSetCommand, NULL, 2, (void *) SET_CALLEDNUM },          L2tpSetCommand, NULL, 2, (void *) SET_CALLEDNUM },
     { "hostname {name}",                "Set L2TP local hostname",      { "hostname {name}",                "Set L2TP local hostname",
         L2tpSetCommand, NULL, 2, (void *) SET_HOSTNAME },          L2tpSetCommand, NULL, 2, (void *) SET_HOSTNAME },
       { "pmask {mask}",                   "Set L2TP peer hostname mask",
           L2tpSetCommand, NULL, 2, (void *) SET_PEERMASK },
     { "secret {sec}",                   "Set L2TP tunnel secret",      { "secret {sec}",                   "Set L2TP tunnel secret",
         L2tpSetCommand, NULL, 2, (void *) SET_SECRET },          L2tpSetCommand, NULL, 2, (void *) SET_SECRET },
     { "enable [opt ...]",               "Enable option",      { "enable [opt ...]",               "Enable option",
Line 298  L2tpInit(Link l) Line 303  L2tpInit(Link l)
     l2tp->conf.peer_addr.width = 0;      l2tp->conf.peer_addr.width = 0;
     l2tp->conf.peer_port = 0;      l2tp->conf.peer_port = 0;
     l2tp->conf.fqdn_peer_addr = NULL;      l2tp->conf.fqdn_peer_addr = NULL;
       l2tp->conf.peer_mask = NULL;
   
     Enable(&l2tp->conf.options, L2TP_CONF_DATASEQ);      Enable(&l2tp->conf.options, L2TP_CONF_DATASEQ);
     Enable(&l2tp->conf.options, L2TP_CONF_RESOLVE_ONCE);      Enable(&l2tp->conf.options, L2TP_CONF_RESOLVE_ONCE);
Line 320  L2tpInst(Link l, Link lt) Line 326  L2tpInst(Link l, Link lt)
         if (pit->conf.fqdn_peer_addr != NULL)          if (pit->conf.fqdn_peer_addr != NULL)
             pi->conf.fqdn_peer_addr =              pi->conf.fqdn_peer_addr =
                 Mstrdup(MB_PHYS, pit->conf.fqdn_peer_addr);                  Mstrdup(MB_PHYS, pit->conf.fqdn_peer_addr);
           if (pit->conf.peer_mask != NULL)
               pi->conf.peer_mask = Mstrdup(MB_PHYS, pit->conf.peer_mask);
         if (pi->server)          if (pi->server)
             pi->server->refs++;              pi->server->refs++;
                   
Line 512  L2tpOpen(Link l) Line 520  L2tpOpen(Link l)
         win = htons(8); /* XXX: this value is empirical. */          win = htons(8); /* XXX: this value is empirical. */
         if ((ppp_l2tp_avp_list_append(avps, 1, 0, AVP_HOST_NAME,          if ((ppp_l2tp_avp_list_append(avps, 1, 0, AVP_HOST_NAME,
               hostname, strlen(hostname)) == -1) ||                hostname, strlen(hostname)) == -1) ||
            (ppp_l2tp_avp_list_append(avps, 1, 0, AVP_VENDOR_NAME,            (ppp_l2tp_avp_list_append(avps, 0, 0, AVP_VENDOR_NAME,
               MPD_VENDOR, strlen(MPD_VENDOR)) == -1) ||                MPD_VENDOR, strlen(MPD_VENDOR)) == -1) ||
             (ppp_l2tp_avp_list_append(avps, 1, 0, AVP_BEARER_CAPABILITIES,              (ppp_l2tp_avp_list_append(avps, 1, 0, AVP_BEARER_CAPABILITIES,
               &cap, sizeof(cap)) == -1) ||                &cap, sizeof(cap)) == -1) ||
Line 680  L2tpShutdown(Link l) Line 688  L2tpShutdown(Link l)
   
     if (pi->conf.fqdn_peer_addr)      if (pi->conf.fqdn_peer_addr)
         Freee(pi->conf.fqdn_peer_addr);          Freee(pi->conf.fqdn_peer_addr);
    if (pi->conf.peer_mask)
         Freee(pi->conf.peer_mask);
     L2tpUnListen(l);      L2tpUnListen(l);
     Freee(l->info);      Freee(l->info);
 }  }
Line 911  L2tpStat(Context ctx) Line 920  L2tpStat(Context ctx)
         Printf(", port %u", l2tp->conf.peer_port);          Printf(", port %u", l2tp->conf.peer_port);
     Printf("\r\n");      Printf("\r\n");
     Printf("\tHostname     : %s\r\n", l2tp->conf.hostname);      Printf("\tHostname     : %s\r\n", l2tp->conf.hostname);
       Printf("\tPeer mask    : %s\r\n", l2tp->conf.peer_mask);
     Printf("\tSecret       : %s\r\n", (l2tp->conf.callingnum[0])?"******":"");      Printf("\tSecret       : %s\r\n", (l2tp->conf.callingnum[0])?"******":"");
     Printf("\tCalling number: %s\r\n", l2tp->conf.callingnum);      Printf("\tCalling number: %s\r\n", l2tp->conf.callingnum);
     Printf("\tCalled number: %s\r\n", l2tp->conf.callednum);      Printf("\tCalled number: %s\r\n", l2tp->conf.callednum);
Line 1103  ppp_l2tp_initiated_cb(struct ppp_l2tp_ctrl *ctrl, Line 1113  ppp_l2tp_initiated_cb(struct ppp_l2tp_ctrl *ctrl,
         u_char *include_length, u_char *enable_dseq)          u_char *include_length, u_char *enable_dseq)
 {  {
         struct  l2tp_tun *const tun = ppp_l2tp_ctrl_get_cookie(ctrl);          struct  l2tp_tun *const tun = ppp_l2tp_ctrl_get_cookie(ctrl);
           char   *peername = ppp_l2tp_ctrl_get_peer_name_p(ctrl);
         struct  ppp_l2tp_avp_ptrs *ptrs = NULL;          struct  ppp_l2tp_avp_ptrs *ptrs = NULL;
         Link    l = NULL;          Link    l = NULL;
         L2tpInfo pi = NULL;          L2tpInfo pi = NULL;
Line 1146  ppp_l2tp_initiated_cb(struct ppp_l2tp_ctrl *ctrl, Line 1157  ppp_l2tp_initiated_cb(struct ppp_l2tp_ctrl *ctrl,
                     ((u_addrempty(&pi2->conf.self_addr)) || (u_addrcompare(&pi2->conf.self_addr, &tun->self_addr) == 0)) &&                      ((u_addrempty(&pi2->conf.self_addr)) || (u_addrcompare(&pi2->conf.self_addr, &tun->self_addr) == 0)) &&
                     (pi2->conf.self_port == 0 || pi2->conf.self_port == tun->self_port) &&                      (pi2->conf.self_port == 0 || pi2->conf.self_port == tun->self_port) &&
                     (IpAddrInRange(&pi2->conf.peer_addr, &tun->peer_addr)) &&                      (IpAddrInRange(&pi2->conf.peer_addr, &tun->peer_addr)) &&
                    (pi2->conf.peer_port == 0 || pi2->conf.peer_port == tun->peer_port)) {                    (pi2->conf.peer_port == 0 || pi2->conf.peer_port == tun->peer_port) &&
                     (peername == NULL || *peername == 0 || pi2->conf.peer_mask == 0 || fnmatch(pi2->conf.peer_mask, peername, 0) == 0)) {
                                                   
                         if (pi == NULL || pi2->conf.peer_addr.width > pi->conf.peer_addr.width) {                          if (pi == NULL || pi2->conf.peer_addr.width > pi->conf.peer_addr.width) {
                                 l = l2;                                  l = l2;
Line 1165  ppp_l2tp_initiated_cb(struct ppp_l2tp_ctrl *ctrl, Line 1177  ppp_l2tp_initiated_cb(struct ppp_l2tp_ctrl *ctrl,
                 Log(LG_PHYS, ("[%s] L2TP: %s call #%u via control connection %p accepted",                   Log(LG_PHYS, ("[%s] L2TP: %s call #%u via control connection %p accepted", 
                     l->name, (out?"Outgoing":"Incoming"),                       l->name, (out?"Outgoing":"Incoming"), 
                     ppp_l2tp_sess_get_serial(sess), ctrl));                      ppp_l2tp_sess_get_serial(sess), ctrl));
                   if (peername && *peername)
                       Log(LG_PHYS2, ("[%s] L2TP: Call #%u remote hostname is %s",
                           l->name, ppp_l2tp_sess_get_serial(sess), peername));
   
                 if (out)                  if (out)
                     l->state = PHYS_STATE_READY;                      l->state = PHYS_STATE_READY;
Line 1711  L2tpSetCommand(Context ctx, int ac, char *av[], void * Line 1726  L2tpSetCommand(Context ctx, int ac, char *av[], void *
 {  {
     L2tpInfo            const l2tp = (L2tpInfo) ctx->lnk->info;      L2tpInfo            const l2tp = (L2tpInfo) ctx->lnk->info;
     char                **fqdn_peer_addr = &l2tp->conf.fqdn_peer_addr;      char                **fqdn_peer_addr = &l2tp->conf.fqdn_peer_addr;
       char                **peer_mask = &l2tp->conf.peer_mask;
     struct u_range      rng;      struct u_range      rng;
     int                 port;      int                 port;
   
Line 1756  L2tpSetCommand(Context ctx, int ac, char *av[], void * Line 1772  L2tpSetCommand(Context ctx, int ac, char *av[], void *
             if (ac != 1)              if (ac != 1)
                 return(-1);                  return(-1);
             strlcpy(l2tp->conf.hostname, av[0], sizeof(l2tp->conf.hostname));              strlcpy(l2tp->conf.hostname, av[0], sizeof(l2tp->conf.hostname));
               break;
           case SET_PEERMASK:
               if (ac != 1)
                   return(-1);
               if (*peer_mask)
                   Freee(*peer_mask);
               *peer_mask = Mstrdup(MB_PHYS, av[0]);
             break;              break;
         case SET_SECRET:          case SET_SECRET:
             if (ac != 1)              if (ac != 1)

Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.3


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>