On Sun, Aug 21, 2016 at 04:36:52PM -0600, Philp Prindeville wrote: > Inline > > > On 08/20/2016 09:52 AM, f...@48lvckh6395k16k5.yundunddos.com wrote: > > From: Gao Feng <f...@ikuai8.com> > > > > Use PPP_ALLSTATIONS, PPP_UI, and SEND_SHUTDOWN instead of 0xff, > > 0x03, and 2 separately. > > > > Signed-off-by: Gao Feng <f...@ikuai8.com> > > --- > > v3: Modify the subject; > > v2: Only replace the literal number with macros according to Guillaume's > > advice > > v1: Inital patch > > > > net/l2tp/l2tp_ppp.c | 8 ++++---- > > 1 file changed, 4 insertions(+), 4 deletions(-) > > > > diff --git a/net/l2tp/l2tp_ppp.c b/net/l2tp/l2tp_ppp.c > > index d9560aa..65e2fd6 100644 > > --- a/net/l2tp/l2tp_ppp.c > > +++ b/net/l2tp/l2tp_ppp.c > > @@ -177,7 +177,7 @@ static int pppol2tp_recv_payload_hook(struct sk_buff > > *skb) > > if (!pskb_may_pull(skb, 2)) > > return 1; > > - if ((skb->data[0] == 0xff) && (skb->data[1] == 0x03)) > > + if ((skb->data[0] == PPP_ALLSTATIONS) && (skb->data[1] == PPP_UI)) > > This should have used PPP_ADDRESS() and PPP_CONTROL() here. > Then please justify how would that make the code more readable. We're not trying to interpret a known valid PPP header here.
> > skb_pull(skb, 2); > > This magic number should go away. > Again, this is *not* a magic number. We've explicitely accessed the first _two_ header bytes and want to skip them. pskb_may_pull(2), ->data[0], ->data[1] and skb_pull(2) all go together. There's even a nice comment telling you what is done and why: /* Skip PPP header, if present. In testing, Microsoft L2TP clients * don't send the PPP header (PPP header compression enabled), but * other clients can include the header. So we cope with both cases * here. The PPP header is always FF03 when using L2TP. * * Note that skb->data[] isn't dereferenced from a u16 ptr here since * the field may be unaligned. */ Apart from the unprecise "PPP header" term, which should be read as "address and control fields", things should be quite clear. > > @@ -282,7 +282,7 @@ static void pppol2tp_session_sock_put(struct > > l2tp_session *session) > > static int pppol2tp_sendmsg(struct socket *sock, struct msghdr *m, > > size_t total_len) > > { > > - static const unsigned char ppph[2] = { 0xff, 0x03 }; > > + static const unsigned char ppph[2] = {PPP_ALLSTATIONS, PPP_UI}; > > PPP has a 4-byte header. Where's the protocol value? > No, PPP header (whatever you include in it) is of variable length. And the protocol has already been set by the PPP layer anyway. We're in L2TP here.