From 4e01f9921e527a4e360a43eff6f9b8bcda70a5c5 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Wed, 7 Apr 2010 16:40:49 -0500 Subject: ppp: Add rca callback When the other side acks our options, then let us apply these options locally and start using them --- gatchat/ppp_ipcp.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) (limited to 'gatchat/ppp_ipcp.c') diff --git a/gatchat/ppp_ipcp.c b/gatchat/ppp_ipcp.c index 19bd4fea..b8610666 100644 --- a/gatchat/ppp_ipcp.c +++ b/gatchat/ppp_ipcp.c @@ -108,6 +108,26 @@ static void ipcp_finished(struct pppcp_data *data) g_print("ipcp finished\n"); } +static void ipcp_rca(struct pppcp_data *pppcp, + const struct pppcp_packet *packet) +{ + struct ipcp_data *ipcp = pppcp_get_data(pppcp); + struct ppp_option_iter iter; + + ppp_option_iter_init(&iter, packet); + + while (ppp_option_iter_next(&iter) == TRUE) { + switch (ppp_option_iter_get_type(&iter)) { + case IP_ADDRESS: + memcpy(ipcp->ip_address, + ppp_option_iter_get_data(&iter), 4); + break; + default: + break; + } + } +} + /* * Scan the option to see if it is acceptable, unacceptable, or rejected */ @@ -136,9 +156,6 @@ static void ipcp_option_process(struct pppcp_data *pppcp, struct ipcp_data *ipcp = pppcp_get_data(pppcp); switch (option->type) { - case IP_ADDRESS: - memcpy(ipcp->ip_address, option->data, 4); - break; case PRIMARY_DNS_SERVER: memcpy(ipcp->primary_dns, option->data, 4); break; @@ -162,6 +179,7 @@ struct pppcp_action ipcp_action = { .this_layer_down = ipcp_down, .this_layer_started = ipcp_started, .this_layer_finished = ipcp_finished, + .rca = ipcp_rca, .option_scan = ipcp_option_scan, .option_process = ipcp_option_process, }; -- cgit v1.2.3