mirror of git://git.sysmocom.de/ofono
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.
This commit is contained in:
parent
fce78feb54
commit
a9c0be7339
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue