ppp: use default ACCM when sending LCP codes 1-7
PATCH 1/1 ppp: use default ACCM when sending LCP codes 1-7
According to the spec, you must transmit all Link Configuration, Termination, and Code-Reject packets as if no options had been negotiated. This requires that when encoding we use the default ACCM of 0xffffffff when sending these types of packets.
--- gatchat/gatppp.c | 10 ++++++++++ gatchat/ppp_cp.c | 8 ++++++++ gatchat/ppp_cp.h | 2 ++ 3 files changed, 20 insertions(+), 0 deletions(-)
gatchat/gatppp.c +10 -0
@@ -124,6 +124,7 @@ static struct frame_buffer *ppp_encode(GAtPPP *ppp, guint8 *data, int len)int i =0 ;guint16 fcs =PPPINITFCS16 ;guint16 proto =get_host_short (data); +guint8 code;gboolean lcp = (proto ==LCP_PROTOCOL );guint8 *frame; struct frame_buffer *fb =
@@ -133,6 +134,15 @@ static struct frame_buffer *ppp_encode(GAtPPP *ppp, guint8 *data, int len)return NULL ; frame = fb->bytes; +/* +* all LCP Link Configuration, Link Termination, and Code-Reject +* packets must be sent with the default sending ACCM +*/ +if (lcp) { + code =pppcp_get_code (data); + lcp = code >0 && code <8 ; + } +/* copy in the HDLC framing */ frame[pos++] =PPP_FLAG_SEQ ;
gatchat/ppp_cp.c +8 -0
@@ -267,6 +267,14 @@ const guint8 *ppp_option_iter_get_data(struct ppp_option_iter *iter)return iter->option_data; } +guint8 pppcp_get_code (const guint8 *data) +{ +struct ppp_header *ppp_packet = (struct ppp_header *) data; +struct pppcp_packet *packet = (struct pppcp_packet *) ppp_packet->info; + +return packet->code; +} +static gboolean pppcp_timeout (gpointer user_data) {struct pppcp_timer_data *timer_data = user_data;
gatchat/ppp_cp.h +2 -0
@@ -110,6 +110,8 @@ void pppcp_set_data(struct pppcp_data *pppcp, gpointer data);gpointer pppcp_get_data (struct pppcp_data *pppcp);GAtPPP *pppcp_get_ppp (struct pppcp_data *pppcp); +guint8 pppcp_get_code (const guint8 *data); +void pppcp_set_local_options (struct pppcp_data *data,const guint8 *options,guint16 len);
Signature · 1 line
1.6.6.1
Hi Kristen,
Quoted 10 lines
According to the spec, you must transmit all Link Configuration, Termination, and Code-Reject packets as if no options had been negotiated. This requires that when encoding we use the default ACCM of
0xffffffffwhen sending these types of packets.--- gatchat/gatppp.c | 10 ++++++++++ gatchat/ppp_cp.c | 8 ++++++++ gatchat/ppp_cp.h | 2 ++ 3 files changed, 20 insertions(+), 0 deletions(-)
This patch has been applied, thanks.
Regards,
-Denis