Hi Jiannan, ----- On Jul 13, 2017, at 2:44 AM, Jiannan Ouyang ouya...@fb.com wrote:
[...] > -static int gtp_rx(struct pdp_ctx *pctx, struct sk_buff *skb, > - unsigned int hdrlen, unsigned int role) > +static int gtp_rx(struct gtp_dev *gtp, struct sk_buff *skb, > + unsigned int hdrlen, struct sock *sk, > + struct metadata_dst *tun_dst) Some time ago, there was an extensive discussion about the relation of PDP context and network devices. You are basically reverting one of the changes that was made in that context. I think it is wrong to couple GTP devices and PDP context the way you do here (there are people that disagree, though). The GTP network device of one of two structures owning the PDP context, the other is the GTP socket. GTP network devices and GTP sockets should be strictly separated. The GTP network device owns the IP given to the MS, handles mapping IP's into GTP tunnels (peer GSN + TEIDs) and hands the resulting GTP packets of to the GTP socket for sending. The GTP socket decaps the GTP packet, find the right context and based on information therein passes it to the GTP network device. By separating is that way, you can have MS with overlapping or colliding IP's on the same GTP socket as long as they belong to different GTP network devices. We had a length discussion about whether the above scenario makes sense. I'm not sure if we reached a final verdict, but the 3GPP specifications clearly permit such a setup. Regards Andreas