ipcp->options_len = len;
}
+static void ipcp_reset_config_options(struct ipcp_data *ipcp)
+{
+ ipcp->req_options = REQ_OPTION_IPADDR | REQ_OPTION_DNS1 |
+ REQ_OPTION_DNS2 | REQ_OPTION_NBNS1 |
+ REQ_OPTION_NBNS2;
+ ipcp->ipaddr = 0;
+ ipcp->dns1 = 0;
+ ipcp->dns2 = 0;
+ ipcp->nbns1 = 0;
+ ipcp->nbns2 = 0;
+
+ ipcp_generate_config_options(ipcp);
+}
+
static void ipcp_up(struct pppcp_data *pppcp)
{
struct ipcp_data *ipcp = pppcp_get_data(pppcp);
static void ipcp_down(struct pppcp_data *pppcp)
{
+ struct ipcp_data *ipcp = pppcp_get_data(pppcp);
+
+ ipcp_reset_config_options(ipcp);
+ pppcp_set_local_options(pppcp, ipcp->options, ipcp->options_len);
}
/*
}
pppcp_set_data(pppcp, ipcp);
-
- ipcp->req_options = REQ_OPTION_IPADDR | REQ_OPTION_DNS1 |
- REQ_OPTION_DNS2 | REQ_OPTION_NBNS1 |
- REQ_OPTION_NBNS2;
-
- ipcp_generate_config_options(ipcp);
+ ipcp_reset_config_options(ipcp);
pppcp_set_local_options(pppcp, ipcp->options, ipcp->options_len);
return pppcp;
lcp->options_len = len;
}
+static void lcp_reset_config_options(struct lcp_data *lcp)
+{
+ lcp->req_options = REQ_OPTION_ACCM;
+ lcp->accm = 0;
+
+ lcp_generate_config_options(lcp);
+}
+
/*
* signal the Up event to the NCP
*/
*/
static void lcp_down(struct pppcp_data *pppcp)
{
- /* XXX should implement a way to signal NCP */
+ struct lcp_data *lcp = pppcp_get_data(pppcp);
+
+ lcp_reset_local_options(lcp);
+ pppcp_set_local_options(pppcp, lcp->options, lcp->options_len);
}
/*
pppcp_set_data(pppcp, lcp);
- lcp->req_options = REQ_OPTION_ACCM;
- lcp->accm = 0;
-
- lcp_generate_config_options(lcp);
+ lcp_reset_local_options(lcp);
pppcp_set_local_options(pppcp, lcp->options, lcp->options_len);
return pppcp;