]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/multilink.c
Large patch from Frank Cusack <fcusack@fcusack.com> to add proper
[ppp.git] / pppd / multilink.c
index c0ad23790cbbbff92f8238c942d891b1d4ea5440..e5f2ac40d80098f15bc0f89ef007c4c47350be88 100644 (file)
@@ -49,7 +49,7 @@ static int owns_unit __P((TDB_DATA pid, int unit));
         || ((addr) & 0xfff00000) == 0xac100000         /* 172.16.x.x */  \
         || ((addr) & 0xffff0000) == 0xc0a80000)        /* 192.168.x.x */
 
-#define process_exists(n)      (kill(0, (n)) == 0 || errno != ESRCH)
+#define process_exists(n)      (kill((n), 0) == 0 || errno != ESRCH)
 
 void
 mp_check_options()
@@ -71,9 +71,6 @@ mp_check_options()
        if (!wo->neg_endpoint && !noendpoint) {
                /* get a default endpoint value */
                wo->neg_endpoint = get_default_epdisc(&wo->endpoint);
-               if (wo->neg_endpoint)
-                       dbglog("using default endpoint %s",
-                              epdisc_to_str(&wo->endpoint));
        }
 }
 
@@ -86,8 +83,9 @@ mp_join_bundle()
 {
        lcp_options *go = &lcp_gotoptions[0];
        lcp_options *ho = &lcp_hisoptions[0];
+       lcp_options *ao = &lcp_allowoptions[0];
        int unit, pppd_pid;
-       int l;
+       int l, mtu;
        char *p;
        TDB_DATA key, pid, rec;
 
@@ -95,14 +93,18 @@ mp_join_bundle()
                /* not doing multilink */
                if (go->neg_mrru)
                        notice("oops, multilink negotiated only for receive");
-               multilink = 0;
+               mtu = ho->neg_mru? ho->mru: PPP_MRU;
+               if (mtu > ao->mru)
+                       mtu = ao->mru;
                if (demand) {
                        /* already have a bundle */
                        cfg_bundle(0, 0, 0, 0);
+                       netif_set_mtu(0, mtu);
                        return 0;
                }
                make_new_bundle(0, 0, 0, 0);
                set_ifunit(1);
+               netif_set_mtu(0, mtu);
                return 0;
        }
 
@@ -130,14 +132,15 @@ mp_join_bundle()
                              epdisc_to_str(&ho->endpoint));
        if (bundle_name)
                p += slprintf(p, bundle_id+l-p, "/%v", bundle_name);
-       dbglog("bundle_id = %s", bundle_id+7);
 
        /*
         * For demand mode, we only need to configure the bundle
         * and attach the link.
         */
+       mtu = MIN(ho->mrru, ao->mru);
        if (demand) {
                cfg_bundle(go->mrru, ho->mrru, go->neg_ssnhf, ho->neg_ssnhf);
+               netif_set_mtu(0, mtu);
                script_setenv("BUNDLE", bundle_id + 7, 1);
                return 0;
        }
@@ -181,6 +184,7 @@ mp_join_bundle()
        /* we have to make a new bundle */
        make_new_bundle(go->mrru, ho->mrru, go->neg_ssnhf, ho->neg_ssnhf);
        set_ifunit(1);
+       netif_set_mtu(0, mtu);
        script_setenv("BUNDLE", bundle_id + 7, 1);
        tdb_writeunlock(pppdb);
        info("New bundle %s created", ifname);
@@ -361,12 +365,10 @@ str_to_epdisc(ep, str)
                if (i == 0 || str[i] != 0)
                        return 0;
                set_ip_epdisc(ep, addr);
-               dbglog("str_to_epdisc -> %s", epdisc_to_str(ep));
                return 1;
        }
        if (i == EPD_MAC && get_if_hwaddr(ep->value, str) >= 0) {
                ep->length = 6;
-               dbglog("str_to_epdisc -> %s", epdisc_to_str(ep));
                return 1;
        }
 
@@ -389,7 +391,6 @@ str_to_epdisc(ep, str)
        if (*str != 0 || (ep->class == EPD_MAC && l != 6))
                return 0;
        ep->length = l;
-       dbglog("str_to_epdisc -> %s", epdisc_to_str(ep));
        return 1;
 }