X-Git-Url: https://git.ozlabs.org/?p=ppp.git;a=blobdiff_plain;f=pppd%2Fmultilink.c;h=c3a782f284662df0fce296d1e83518bd9a654f5f;hp=23f0fa084962a4ffb7baa345919f58b9b2ab6068;hb=cffe80dd87a8ba3fba8f56fda45d2c0cfd62ba4d;hpb=141e4209b6e794a91035fa1cb63ab88fca0fb150 diff --git a/pppd/multilink.c b/pppd/multilink.c index 23f0fa0..c3a782f 100644 --- a/pppd/multilink.c +++ b/pppd/multilink.c @@ -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() @@ -86,8 +86,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,12 +96,17 @@ mp_join_bundle() /* not doing multilink */ if (go->neg_mrru) notice("oops, multilink negotiated only for receive"); + 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); + netif_set_mtu(0, mtu); set_ifunit(1); return 0; } @@ -134,8 +140,10 @@ mp_join_bundle() * 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; } @@ -178,6 +186,7 @@ mp_join_bundle() /* we have to make a new bundle */ make_new_bundle(go->mrru, ho->mrru, go->neg_ssnhf, ho->neg_ssnhf); + netif_set_mtu(0, mtu); set_ifunit(1); script_setenv("BUNDLE", bundle_id + 7, 1); tdb_writeunlock(pppdb);