Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pptp: Refactor the struct and macros of PPTP codes

1. Use struct gre_base_hdr directly in pptp_gre_header instead of
duplicated members;
2. Use existing macros like GRE_KEY, GRE_SEQ, and so on instead of
duplicated macros defined by PPTP;
3. Add new macros like GRE_IS_ACK/SEQ and so on instead of
PPTP_GRE_IS_A/S and so on;

Signed-off-by: Gao Feng <fgao@ikuai8.com>
Reviewed-by: Philip Prindeville <philipp@redfish-solutions.com>
Signed-off-by: David S. Miller <davem@davemloft.net>

authored by

Gao Feng and committed by
David S. Miller
03459345 cfad65c7

+24 -35
+13 -15
drivers/net/ppp/pptp.c
··· 206 206 skb_push(skb, header_len); 207 207 hdr = (struct pptp_gre_header *)(skb->data); 208 208 209 - hdr->flags = PPTP_GRE_FLAG_K; 210 - hdr->ver = PPTP_GRE_VER; 211 - hdr->protocol = htons(PPTP_GRE_PROTO); 212 - hdr->call_id = htons(opt->dst_addr.call_id); 209 + hdr->gre_hd.flags = GRE_KEY | GRE_VERSION_1 | GRE_SEQ; 210 + hdr->gre_hd.protocol = GRE_PROTO_PPP; 211 + hdr->call_id = htons(opt->dst_addr.call_id); 213 212 214 - hdr->flags |= PPTP_GRE_FLAG_S; 215 - hdr->seq = htonl(++opt->seq_sent); 213 + hdr->seq = htonl(++opt->seq_sent); 216 214 if (opt->ack_sent != seq_recv) { 217 215 /* send ack with this message */ 218 - hdr->ver |= PPTP_GRE_FLAG_A; 216 + hdr->gre_hd.flags |= GRE_ACK; 219 217 hdr->ack = htonl(seq_recv); 220 218 opt->ack_sent = seq_recv; 221 219 } ··· 276 278 headersize = sizeof(*header); 277 279 278 280 /* test if acknowledgement present */ 279 - if (PPTP_GRE_IS_A(header->ver)) { 281 + if (GRE_IS_ACK(header->gre_hd.flags)) { 280 282 __u32 ack; 281 283 282 284 if (!pskb_may_pull(skb, headersize)) ··· 284 286 header = (struct pptp_gre_header *)(skb->data); 285 287 286 288 /* ack in different place if S = 0 */ 287 - ack = PPTP_GRE_IS_S(header->flags) ? header->ack : header->seq; 289 + ack = GRE_IS_SEQ(header->gre_hd.flags) ? header->ack : header->seq; 288 290 289 291 ack = ntohl(ack); 290 292 ··· 297 299 headersize -= sizeof(header->ack); 298 300 } 299 301 /* test if payload present */ 300 - if (!PPTP_GRE_IS_S(header->flags)) 302 + if (!GRE_IS_SEQ(header->gre_hd.flags)) 301 303 goto drop; 302 304 303 305 payload_len = ntohs(header->payload_len); ··· 358 360 359 361 header = (struct pptp_gre_header *)skb->data; 360 362 361 - if (ntohs(header->protocol) != PPTP_GRE_PROTO || /* PPTP-GRE protocol for PPTP */ 362 - PPTP_GRE_IS_C(header->flags) || /* flag C should be clear */ 363 - PPTP_GRE_IS_R(header->flags) || /* flag R should be clear */ 364 - !PPTP_GRE_IS_K(header->flags) || /* flag K should be set */ 365 - (header->flags&0xF) != 0) /* routing and recursion ctrl = 0 */ 363 + if (header->gre_hd.protocol != GRE_PROTO_PPP || /* PPTP-GRE protocol for PPTP */ 364 + GRE_IS_CSUM(header->gre_hd.flags) || /* flag CSUM should be clear */ 365 + GRE_IS_ROUTING(header->gre_hd.flags) || /* flag ROUTING should be clear */ 366 + !GRE_IS_KEY(header->gre_hd.flags) || /* flag KEY should be set */ 367 + (header->gre_hd.flags & GRE_FLAGS)) /* flag Recursion Ctrl should be clear */ 366 368 /* if invalid, discard this packet */ 367 369 goto drop; 368 370
+1 -18
include/net/pptp.h
··· 10 10 ((((curseq) & 0xffffff00) == 0) &&\ 11 11 (((lastseq) & 0xffffff00) == 0xffffff00)) 12 12 13 - #define PPTP_GRE_PROTO 0x880B 14 - #define PPTP_GRE_VER 0x1 15 - 16 - #define PPTP_GRE_FLAG_C 0x80 17 - #define PPTP_GRE_FLAG_R 0x40 18 - #define PPTP_GRE_FLAG_K 0x20 19 - #define PPTP_GRE_FLAG_S 0x10 20 - #define PPTP_GRE_FLAG_A 0x80 21 - 22 - #define PPTP_GRE_IS_C(f) ((f)&PPTP_GRE_FLAG_C) 23 - #define PPTP_GRE_IS_R(f) ((f)&PPTP_GRE_FLAG_R) 24 - #define PPTP_GRE_IS_K(f) ((f)&PPTP_GRE_FLAG_K) 25 - #define PPTP_GRE_IS_S(f) ((f)&PPTP_GRE_FLAG_S) 26 - #define PPTP_GRE_IS_A(f) ((f)&PPTP_GRE_FLAG_A) 27 - 28 13 #define PPTP_HEADER_OVERHEAD (2+sizeof(struct pptp_gre_header)) 29 14 struct pptp_gre_header { 30 - u8 flags; 31 - u8 ver; 32 - __be16 protocol; 15 + struct gre_base_hdr gre_hd; 33 16 __be16 payload_len; 34 17 __be16 call_id; 35 18 __be32 seq;
+10 -2
include/uapi/linux/if_tunnel.h
··· 28 28 #define GRE_FLAGS __cpu_to_be16(0x0078) 29 29 #define GRE_VERSION __cpu_to_be16(0x0007) 30 30 31 - #define GRE_VERSION_1 __cpu_to_be16(0x0001) 32 - #define GRE_PROTO_PPP __cpu_to_be16(0x880b) 31 + #define GRE_IS_CSUM(f) ((f) & GRE_CSUM) 32 + #define GRE_IS_ROUTING(f) ((f) & GRE_ROUTING) 33 + #define GRE_IS_KEY(f) ((f) & GRE_KEY) 34 + #define GRE_IS_SEQ(f) ((f) & GRE_SEQ) 35 + #define GRE_IS_STRICT(f) ((f) & GRE_STRICT) 36 + #define GRE_IS_REC(f) ((f) & GRE_REC) 37 + #define GRE_IS_ACK(f) ((f) & GRE_ACK) 38 + 39 + #define GRE_VERSION_1 __cpu_to_be16(0x0001) 40 + #define GRE_PROTO_PPP __cpu_to_be16(0x880b) 33 41 #define GRE_PPTP_KEY_MASK __cpu_to_be32(0xffff) 34 42 35 43 struct ip_tunnel_parm {