diff --git a/gatchat/ppp_cp.c b/gatchat/ppp_cp.c index 115fb65e..de6c7766 100644 --- a/gatchat/ppp_cp.c +++ b/gatchat/ppp_cp.c @@ -135,6 +135,40 @@ static int cp_transitions[16][10] = { { INV, INV, 2, 3, 4, 5, 6, 7, 8, SER|9 }, }; +enum pppcp_code { + CONFIGURE_REQUEST = 1, + CONFIGURE_ACK, + CONFIGURE_NAK, + CONFIGURE_REJECT, + TERMINATE_REQUEST, + TERMINATE_ACK, + CODE_REJECT, + PROTOCOL_REJECT, + ECHO_REQUEST, + ECHO_REPLY, + DISCARD_REQUEST +}; + +#define LCP_SUPPORTED_CODES ((1 << CONFIGURE_REQUEST) | \ + (1 << CONFIGURE_ACK) | \ + (1 << CONFIGURE_NAK) | \ + (1 << CONFIGURE_REJECT) | \ + (1 << TERMINATE_REQUEST) | \ + (1 << TERMINATE_ACK) | \ + (1 << CODE_REJECT) | \ + (1 << PROTOCOL_REJECT) | \ + (1 << ECHO_REQUEST) | \ + (1 << ECHO_REPLY) | \ + (1 << DISCARD_REQUEST)) + +#define IPCP_SUPPORTED_CODES ((1 << CONFIGURE_REQUEST) | \ + (1 << CONFIGURE_ACK) | \ + (1 << CONFIGURE_NAK) | \ + (1 << CONFIGURE_REJECT) | \ + (1 << TERMINATE_REQUEST) | \ + (1 << TERMINATE_ACK) | \ + (1 << CODE_REJECT)) + enum pppcp_event_type { UP = 0, DOWN = 1, @@ -1256,6 +1290,7 @@ void pppcp_free(struct pppcp_data *data) struct pppcp_data *pppcp_new(GAtPPP *ppp, guint16 proto) { struct pppcp_data *data; + guint16 codes; data = g_try_malloc0(sizeof(struct pppcp_data)); if (!data) @@ -1289,5 +1324,19 @@ struct pppcp_data *pppcp_new(GAtPPP *ppp, guint16 proto) data->packet_ops[ECHO_REPLY - 1] = pppcp_process_echo_reply; data->packet_ops[DISCARD_REQUEST - 1] = pppcp_process_discard_request; + switch (proto) { + case LCP_PROTOCOL: + codes = LCP_SUPPORTED_CODES; + break; + case IPCP_PROTO: + codes = IPCP_SUPPORTED_CODES; + break; + default: + codes = 0; + break; + } + + pppcp_set_valid_codes(data, codes); + return data; } diff --git a/gatchat/ppp_cp.h b/gatchat/ppp_cp.h index 8d2975c1..43068212 100644 --- a/gatchat/ppp_cp.h +++ b/gatchat/ppp_cp.h @@ -21,20 +21,6 @@ struct pppcp_data; -enum pppcp_code { - CONFIGURE_REQUEST = 1, - CONFIGURE_ACK, - CONFIGURE_NAK, - CONFIGURE_REJECT, - TERMINATE_REQUEST, - TERMINATE_ACK, - CODE_REJECT, - PROTOCOL_REJECT, - ECHO_REQUEST, - ECHO_REPLY, - DISCARD_REQUEST -}; - /* option format */ struct ppp_option { guint8 type; diff --git a/gatchat/ppp_ipcp.c b/gatchat/ppp_ipcp.c index ca4d0750..c3e781c7 100644 --- a/gatchat/ppp_ipcp.c +++ b/gatchat/ppp_ipcp.c @@ -44,14 +44,6 @@ struct ipcp_data { struct pppcp_data *pppcp; }; -#define IPCP_SUPPORTED_CODES ((1 << CONFIGURE_REQUEST) | \ - (1 << CONFIGURE_ACK) | \ - (1 << CONFIGURE_NAK) | \ - (1 << CONFIGURE_REJECT) | \ - (1 << TERMINATE_REQUEST) | \ - (1 << TERMINATE_ACK) | \ - (1 << CODE_REJECT)) - enum ipcp_option_types { IP_ADDRESSES = 1, IP_COMPRESSION_PROTO = 2, @@ -193,7 +185,7 @@ struct pppcp_data *ipcp_new(GAtPPP *ppp) g_free(data); return NULL; } - pppcp_set_valid_codes(pppcp, IPCP_SUPPORTED_CODES); + pppcp->option_strings = ipcp_option_strings; pppcp->prefix = "ipcp"; pppcp->priv = data; diff --git a/gatchat/ppp_lcp.c b/gatchat/ppp_lcp.c index 8ea6e56a..6460f336 100644 --- a/gatchat/ppp_lcp.c +++ b/gatchat/ppp_lcp.c @@ -46,18 +46,6 @@ enum lcp_options { ACFC = 8, }; -#define LCP_SUPPORTED_CODES ((1 << CONFIGURE_REQUEST) | \ - (1 << CONFIGURE_ACK) | \ - (1 << CONFIGURE_NAK) | \ - (1 << CONFIGURE_REJECT) | \ - (1 << TERMINATE_REQUEST) | \ - (1 << TERMINATE_ACK) | \ - (1 << CODE_REJECT) | \ - (1 << PROTOCOL_REJECT) | \ - (1 << ECHO_REQUEST) | \ - (1 << ECHO_REPLY) | \ - (1 << DISCARD_REQUEST)) - /* * signal the Up event to the NCP */ @@ -223,14 +211,13 @@ struct pppcp_data *lcp_new(GAtPPP *ppp) { struct pppcp_data *pppcp; struct ppp_option *option; - guint16 codes = LCP_SUPPORTED_CODES; pppcp = pppcp_new(ppp, LCP_PROTOCOL); if (!pppcp) { g_print("Failed to allocate PPPCP struct\n"); return NULL; } - pppcp_set_valid_codes(pppcp, codes); + pppcp->option_strings = lcp_option_strings; pppcp->prefix = "lcp"; pppcp->priv = pppcp;