X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fplugins%2Frp-pppoe%2Fplugin.c;h=e94494b96cc08587e05def9f7f1ec5023dc8bd9a;hb=76307d910b81acb709143b2fd82e1ca724feb24c;hp=2968e72e93c2fb8936520888f0697b49f74852ae;hpb=427e3d851c86e35655e14f1dfa9c831a8fab94d9;p=ppp.git diff --git a/pppd/plugins/rp-pppoe/plugin.c b/pppd/plugins/rp-pppoe/plugin.c index 2968e72..e94494b 100644 --- a/pppd/plugins/rp-pppoe/plugin.c +++ b/pppd/plugins/rp-pppoe/plugin.c @@ -23,7 +23,7 @@ ***********************************************************************/ static char const RCSID[] = -"$Id: plugin.c,v 1.16 2008/06/09 08:34:23 paulus Exp $"; +"$Id: plugin.c,v 1.17 2008/06/15 04:35:50 paulus Exp $"; #define _GNU_SOURCE 1 #include "pppoe.h" @@ -67,6 +67,8 @@ char *pppd_pppoe_service = NULL; static char *acName = NULL; static char *existingSession = NULL; static int printACNames = 0; +static char *pppoe_reqd_mac = NULL; +unsigned char pppoe_reqd_mac_addr[6]; static int PPPoEDevnameHook(char *cmd, char **argv, int doit); static option_t Options[] = { @@ -82,6 +84,8 @@ static option_t Options[] = { "Attach to existing session (sessid:macaddr)" }, { "rp_pppoe_verbose", o_int, &printACNames, "Be verbose about discovered access concentrators"}, + { "pppoe-mac", o_string, &pppoe_reqd_mac, + "Only connect to specified MAC address" }, { NULL } }; int (*OldDevnameHook)(char *cmd, char **argv, int doit) = NULL; @@ -348,6 +352,21 @@ plugin_init(void) void pppoe_check_options(void) { + unsigned int mac[6]; + int i; + + if (pppoe_reqd_mac != NULL) { + if (sscanf(pppoe_reqd_mac, "%x:%x:%x:%x:%x:%x", + &mac[0], &mac[1], &mac[2], &mac[3], + &mac[4], &mac[5]) != 6) { + option_error("cannot parse pppoe-mac option value"); + exit(EXIT_OPTION_ERROR); + } + for (i = 0; i < 6; ++i) + conn->req_peer_mac[i] = mac[i]; + conn->req_peer = 1; + } + lcp_allowoptions[0].neg_accompression = 0; lcp_wantoptions[0].neg_accompression = 0;