ppp: silently discard packets if needed
PATCH 1/1 ppp: silently discard packets if needed
When receiving a packet, check the protocol and the phase to see if the packet should be dropped.
--- gatchat/gatppp.c | 30 +++++++++++++++++++++++++----- 1 files changed, 25 insertions(+), 5 deletions(-)
gatchat/gatppp.c +25 -5
@@ -173,17 +173,37 @@ static struct frame_buffer *ppp_encode(GAtPPP *ppp, guint8 *data, int len)return fb; } +/* +* Silently discard packets which are received when they shouldn't be +*/ +static inline gboolean drop_packet (GAtPPP *ppp,guint16 protocol) +{ +switch (ppp->phase) { +case PPP_PHASE_ESTABLISHMENT : +case PPP_PHASE_TERMINATION : +if (protocol !=LCP_PROTOCOL ) +return TRUE; +break ; +case PPP_PHASE_AUTHENTICATION : +if (protocol !=LCP_PROTOCOL && protocol !=CHAP_PROTOCOL ) +return TRUE; +break ; +case PPP_PHASE_DEAD : +return TRUE; +case PPP_PHASE_NETWORK : +break ; + } + +return FALSE; +} +/* called when we have received a complete ppp frame */ static void ppp_recv (GAtPPP *ppp,struct frame_buffer *frame) {guint16 protocol =ppp_proto (frame->bytes);guint8 *packet =ppp_info (frame->bytes); -/* -* Any non-LCP packets received during Link Establishment -* phase must be silently discarded. -*/ -if (ppp->phase ==PPP_PHASE_ESTABLISHMENT && protocol !=LCP_PROTOCOL ) +if (drop_packet (ppp, protocol))return ;switch (protocol) {
Signature · 1 line
1.6.6.1