linux/drivers/net/gtp.c
<<
>>
Prefs
   1/* GTP according to GSM TS 09.60 / 3GPP TS 29.060
   2 *
   3 * (C) 2012-2014 by sysmocom - s.f.m.c. GmbH
   4 * (C) 2016 by Pablo Neira Ayuso <pablo@netfilter.org>
   5 *
   6 * Author: Harald Welte <hwelte@sysmocom.de>
   7 *         Pablo Neira Ayuso <pablo@netfilter.org>
   8 *         Andreas Schultz <aschultz@travelping.com>
   9 *
  10 * This program is free software; you can redistribute it and/or
  11 * modify it under the terms of the GNU General Public License
  12 * as published by the Free Software Foundation; either version
  13 * 2 of the License, or (at your option) any later version.
  14 */
  15
  16#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  17
  18#include <linux/module.h>
  19#include <linux/skbuff.h>
  20#include <linux/udp.h>
  21#include <linux/rculist.h>
  22#include <linux/jhash.h>
  23#include <linux/if_tunnel.h>
  24#include <linux/net.h>
  25#include <linux/file.h>
  26#include <linux/gtp.h>
  27
  28#include <net/net_namespace.h>
  29#include <net/protocol.h>
  30#include <net/ip.h>
  31#include <net/udp.h>
  32#include <net/udp_tunnel.h>
  33#include <net/icmp.h>
  34#include <net/xfrm.h>
  35#include <net/genetlink.h>
  36#include <net/netns/generic.h>
  37#include <net/gtp.h>
  38
  39/* An active session for the subscriber. */
  40struct pdp_ctx {
  41        struct hlist_node       hlist_tid;
  42        struct hlist_node       hlist_addr;
  43
  44        union {
  45                u64             tid;
  46                struct {
  47                        u64     tid;
  48                        u16     flow;
  49                } v0;
  50                struct {
  51                        u32     i_tei;
  52                        u32     o_tei;
  53                } v1;
  54        } u;
  55        u8                      gtp_version;
  56        u16                     af;
  57
  58        struct in_addr          ms_addr_ip4;
  59        struct in_addr          sgsn_addr_ip4;
  60
  61        atomic_t                tx_seq;
  62        struct rcu_head         rcu_head;
  63};
  64
  65/* One instance of the GTP device. */
  66struct gtp_dev {
  67        struct list_head        list;
  68
  69        struct socket           *sock0;
  70        struct socket           *sock1u;
  71
  72        struct net_device       *dev;
  73
  74        unsigned int            hash_size;
  75        struct hlist_head       *tid_hash;
  76        struct hlist_head       *addr_hash;
  77};
  78
  79static unsigned int gtp_net_id __read_mostly;
  80
  81struct gtp_net {
  82        struct list_head gtp_dev_list;
  83};
  84
  85static u32 gtp_h_initval;
  86
  87static inline u32 gtp0_hashfn(u64 tid)
  88{
  89        u32 *tid32 = (u32 *) &tid;
  90        return jhash_2words(tid32[0], tid32[1], gtp_h_initval);
  91}
  92
  93static inline u32 gtp1u_hashfn(u32 tid)
  94{
  95        return jhash_1word(tid, gtp_h_initval);
  96}
  97
  98static inline u32 ipv4_hashfn(__be32 ip)
  99{
 100        return jhash_1word((__force u32)ip, gtp_h_initval);
 101}
 102
 103/* Resolve a PDP context structure based on the 64bit TID. */
 104static struct pdp_ctx *gtp0_pdp_find(struct gtp_dev *gtp, u64 tid)
 105{
 106        struct hlist_head *head;
 107        struct pdp_ctx *pdp;
 108
 109        head = &gtp->tid_hash[gtp0_hashfn(tid) % gtp->hash_size];
 110
 111        hlist_for_each_entry_rcu(pdp, head, hlist_tid) {
 112                if (pdp->gtp_version == GTP_V0 &&
 113                    pdp->u.v0.tid == tid)
 114                        return pdp;
 115        }
 116        return NULL;
 117}
 118
 119/* Resolve a PDP context structure based on the 32bit TEI. */
 120static struct pdp_ctx *gtp1_pdp_find(struct gtp_dev *gtp, u32 tid)
 121{
 122        struct hlist_head *head;
 123        struct pdp_ctx *pdp;
 124
 125        head = &gtp->tid_hash[gtp1u_hashfn(tid) % gtp->hash_size];
 126
 127        hlist_for_each_entry_rcu(pdp, head, hlist_tid) {
 128                if (pdp->gtp_version == GTP_V1 &&
 129                    pdp->u.v1.i_tei == tid)
 130                        return pdp;
 131        }
 132        return NULL;
 133}
 134
 135/* Resolve a PDP context based on IPv4 address of MS. */
 136static struct pdp_ctx *ipv4_pdp_find(struct gtp_dev *gtp, __be32 ms_addr)
 137{
 138        struct hlist_head *head;
 139        struct pdp_ctx *pdp;
 140
 141        head = &gtp->addr_hash[ipv4_hashfn(ms_addr) % gtp->hash_size];
 142
 143        hlist_for_each_entry_rcu(pdp, head, hlist_addr) {
 144                if (pdp->af == AF_INET &&
 145                    pdp->ms_addr_ip4.s_addr == ms_addr)
 146                        return pdp;
 147        }
 148
 149        return NULL;
 150}
 151
 152static bool gtp_check_src_ms_ipv4(struct sk_buff *skb, struct pdp_ctx *pctx,
 153                                  unsigned int hdrlen)
 154{
 155        struct iphdr *iph;
 156
 157        if (!pskb_may_pull(skb, hdrlen + sizeof(struct iphdr)))
 158                return false;
 159
 160        iph = (struct iphdr *)(skb->data + hdrlen);
 161
 162        return iph->saddr == pctx->ms_addr_ip4.s_addr;
 163}
 164
 165/* Check if the inner IP source address in this packet is assigned to any
 166 * existing mobile subscriber.
 167 */
 168static bool gtp_check_src_ms(struct sk_buff *skb, struct pdp_ctx *pctx,
 169                             unsigned int hdrlen)
 170{
 171        switch (ntohs(skb->protocol)) {
 172        case ETH_P_IP:
 173                return gtp_check_src_ms_ipv4(skb, pctx, hdrlen);
 174        }
 175        return false;
 176}
 177
 178/* 1 means pass up to the stack, -1 means drop and 0 means decapsulated. */
 179static int gtp0_udp_encap_recv(struct gtp_dev *gtp, struct sk_buff *skb,
 180                               bool xnet)
 181{
 182        unsigned int hdrlen = sizeof(struct udphdr) +
 183                              sizeof(struct gtp0_header);
 184        struct gtp0_header *gtp0;
 185        struct pdp_ctx *pctx;
 186        int ret = 0;
 187
 188        if (!pskb_may_pull(skb, hdrlen))
 189                return -1;
 190
 191        gtp0 = (struct gtp0_header *)(skb->data + sizeof(struct udphdr));
 192
 193        if ((gtp0->flags >> 5) != GTP_V0)
 194                return 1;
 195
 196        if (gtp0->type != GTP_TPDU)
 197                return 1;
 198
 199        rcu_read_lock();
 200        pctx = gtp0_pdp_find(gtp, be64_to_cpu(gtp0->tid));
 201        if (!pctx) {
 202                netdev_dbg(gtp->dev, "No PDP ctx to decap skb=%p\n", skb);
 203                ret = -1;
 204                goto out_rcu;
 205        }
 206
 207        if (!gtp_check_src_ms(skb, pctx, hdrlen)) {
 208                netdev_dbg(gtp->dev, "No PDP ctx for this MS\n");
 209                ret = -1;
 210                goto out_rcu;
 211        }
 212        rcu_read_unlock();
 213
 214        /* Get rid of the GTP + UDP headers. */
 215        return iptunnel_pull_header(skb, hdrlen, skb->protocol, xnet);
 216out_rcu:
 217        rcu_read_unlock();
 218        return ret;
 219}
 220
 221static int gtp1u_udp_encap_recv(struct gtp_dev *gtp, struct sk_buff *skb,
 222                                bool xnet)
 223{
 224        unsigned int hdrlen = sizeof(struct udphdr) +
 225                              sizeof(struct gtp1_header);
 226        struct gtp1_header *gtp1;
 227        struct pdp_ctx *pctx;
 228        int ret = 0;
 229
 230        if (!pskb_may_pull(skb, hdrlen))
 231                return -1;
 232
 233        gtp1 = (struct gtp1_header *)(skb->data + sizeof(struct udphdr));
 234
 235        if ((gtp1->flags >> 5) != GTP_V1)
 236                return 1;
 237
 238        if (gtp1->type != GTP_TPDU)
 239                return 1;
 240
 241        /* From 29.060: "This field shall be present if and only if any one or
 242         * more of the S, PN and E flags are set.".
 243         *
 244         * If any of the bit is set, then the remaining ones also have to be
 245         * set.
 246         */
 247        if (gtp1->flags & GTP1_F_MASK)
 248                hdrlen += 4;
 249
 250        /* Make sure the header is larger enough, including extensions. */
 251        if (!pskb_may_pull(skb, hdrlen))
 252                return -1;
 253
 254        gtp1 = (struct gtp1_header *)(skb->data + sizeof(struct udphdr));
 255
 256        rcu_read_lock();
 257        pctx = gtp1_pdp_find(gtp, ntohl(gtp1->tid));
 258        if (!pctx) {
 259                netdev_dbg(gtp->dev, "No PDP ctx to decap skb=%p\n", skb);
 260                ret = -1;
 261                goto out_rcu;
 262        }
 263
 264        if (!gtp_check_src_ms(skb, pctx, hdrlen)) {
 265                netdev_dbg(gtp->dev, "No PDP ctx for this MS\n");
 266                ret = -1;
 267                goto out_rcu;
 268        }
 269        rcu_read_unlock();
 270
 271        /* Get rid of the GTP + UDP headers. */
 272        return iptunnel_pull_header(skb, hdrlen, skb->protocol, xnet);
 273out_rcu:
 274        rcu_read_unlock();
 275        return ret;
 276}
 277
 278static void gtp_encap_disable(struct gtp_dev *gtp)
 279{
 280        if (gtp->sock0 && gtp->sock0->sk) {
 281                udp_sk(gtp->sock0->sk)->encap_type = 0;
 282                rcu_assign_sk_user_data(gtp->sock0->sk, NULL);
 283        }
 284        if (gtp->sock1u && gtp->sock1u->sk) {
 285                udp_sk(gtp->sock1u->sk)->encap_type = 0;
 286                rcu_assign_sk_user_data(gtp->sock1u->sk, NULL);
 287        }
 288
 289        gtp->sock0 = NULL;
 290        gtp->sock1u = NULL;
 291}
 292
 293static void gtp_encap_destroy(struct sock *sk)
 294{
 295        struct gtp_dev *gtp;
 296
 297        gtp = rcu_dereference_sk_user_data(sk);
 298        if (gtp)
 299                gtp_encap_disable(gtp);
 300}
 301
 302/* UDP encapsulation receive handler. See net/ipv4/udp.c.
 303 * Return codes: 0: success, <0: error, >0: pass up to userspace UDP socket.
 304 */
 305static int gtp_encap_recv(struct sock *sk, struct sk_buff *skb)
 306{
 307        struct pcpu_sw_netstats *stats;
 308        struct gtp_dev *gtp;
 309        bool xnet;
 310        int ret;
 311
 312        gtp = rcu_dereference_sk_user_data(sk);
 313        if (!gtp)
 314                return 1;
 315
 316        netdev_dbg(gtp->dev, "encap_recv sk=%p\n", sk);
 317
 318        xnet = !net_eq(sock_net(sk), dev_net(gtp->dev));
 319
 320        switch (udp_sk(sk)->encap_type) {
 321        case UDP_ENCAP_GTP0:
 322                netdev_dbg(gtp->dev, "received GTP0 packet\n");
 323                ret = gtp0_udp_encap_recv(gtp, skb, xnet);
 324                break;
 325        case UDP_ENCAP_GTP1U:
 326                netdev_dbg(gtp->dev, "received GTP1U packet\n");
 327                ret = gtp1u_udp_encap_recv(gtp, skb, xnet);
 328                break;
 329        default:
 330                ret = -1; /* Shouldn't happen. */
 331        }
 332
 333        switch (ret) {
 334        case 1:
 335                netdev_dbg(gtp->dev, "pass up to the process\n");
 336                return 1;
 337        case 0:
 338                netdev_dbg(gtp->dev, "forwarding packet from GGSN to uplink\n");
 339                break;
 340        case -1:
 341                netdev_dbg(gtp->dev, "GTP packet has been dropped\n");
 342                kfree_skb(skb);
 343                return 0;
 344        }
 345
 346        /* Now that the UDP and the GTP header have been removed, set up the
 347         * new network header. This is required by the upper layer to
 348         * calculate the transport header.
 349         */
 350        skb_reset_network_header(skb);
 351
 352        skb->dev = gtp->dev;
 353
 354        stats = this_cpu_ptr(gtp->dev->tstats);
 355        u64_stats_update_begin(&stats->syncp);
 356        stats->rx_packets++;
 357        stats->rx_bytes += skb->len;
 358        u64_stats_update_end(&stats->syncp);
 359
 360        netif_rx(skb);
 361
 362        return 0;
 363}
 364
 365static int gtp_dev_init(struct net_device *dev)
 366{
 367        struct gtp_dev *gtp = netdev_priv(dev);
 368
 369        gtp->dev = dev;
 370
 371        dev->tstats = alloc_percpu(struct pcpu_sw_netstats);
 372        if (!dev->tstats)
 373                return -ENOMEM;
 374
 375        return 0;
 376}
 377
 378static void gtp_dev_uninit(struct net_device *dev)
 379{
 380        struct gtp_dev *gtp = netdev_priv(dev);
 381
 382        gtp_encap_disable(gtp);
 383        free_percpu(dev->tstats);
 384}
 385
 386static struct rtable *ip4_route_output_gtp(struct net *net, struct flowi4 *fl4,
 387                                           const struct sock *sk, __be32 daddr)
 388{
 389        memset(fl4, 0, sizeof(*fl4));
 390        fl4->flowi4_oif         = sk->sk_bound_dev_if;
 391        fl4->daddr              = daddr;
 392        fl4->saddr              = inet_sk(sk)->inet_saddr;
 393        fl4->flowi4_tos         = RT_CONN_FLAGS(sk);
 394        fl4->flowi4_proto       = sk->sk_protocol;
 395
 396        return ip_route_output_key(net, fl4);
 397}
 398
 399static inline void gtp0_push_header(struct sk_buff *skb, struct pdp_ctx *pctx)
 400{
 401        int payload_len = skb->len;
 402        struct gtp0_header *gtp0;
 403
 404        gtp0 = (struct gtp0_header *) skb_push(skb, sizeof(*gtp0));
 405
 406        gtp0->flags     = 0x1e; /* v0, GTP-non-prime. */
 407        gtp0->type      = GTP_TPDU;
 408        gtp0->length    = htons(payload_len);
 409        gtp0->seq       = htons((atomic_inc_return(&pctx->tx_seq) - 1) % 0xffff);
 410        gtp0->flow      = htons(pctx->u.v0.flow);
 411        gtp0->number    = 0xff;
 412        gtp0->spare[0]  = gtp0->spare[1] = gtp0->spare[2] = 0xff;
 413        gtp0->tid       = cpu_to_be64(pctx->u.v0.tid);
 414}
 415
 416static inline void gtp1_push_header(struct sk_buff *skb, struct pdp_ctx *pctx)
 417{
 418        int payload_len = skb->len;
 419        struct gtp1_header *gtp1;
 420
 421        gtp1 = (struct gtp1_header *) skb_push(skb, sizeof(*gtp1));
 422
 423        /* Bits    8  7  6  5  4  3  2  1
 424         *        +--+--+--+--+--+--+--+--+
 425         *        |version |PT| 0| E| S|PN|
 426         *        +--+--+--+--+--+--+--+--+
 427         *          0  0  1  1  1  0  0  0
 428         */
 429        gtp1->flags     = 0x30; /* v1, GTP-non-prime. */
 430        gtp1->type      = GTP_TPDU;
 431        gtp1->length    = htons(payload_len);
 432        gtp1->tid       = htonl(pctx->u.v1.o_tei);
 433
 434        /* TODO: Suppport for extension header, sequence number and N-PDU.
 435         *       Update the length field if any of them is available.
 436         */
 437}
 438
 439struct gtp_pktinfo {
 440        struct sock             *sk;
 441        struct iphdr            *iph;
 442        struct flowi4           fl4;
 443        struct rtable           *rt;
 444        struct pdp_ctx          *pctx;
 445        struct net_device       *dev;
 446        __be16                  gtph_port;
 447};
 448
 449static void gtp_push_header(struct sk_buff *skb, struct gtp_pktinfo *pktinfo)
 450{
 451        switch (pktinfo->pctx->gtp_version) {
 452        case GTP_V0:
 453                pktinfo->gtph_port = htons(GTP0_PORT);
 454                gtp0_push_header(skb, pktinfo->pctx);
 455                break;
 456        case GTP_V1:
 457                pktinfo->gtph_port = htons(GTP1U_PORT);
 458                gtp1_push_header(skb, pktinfo->pctx);
 459                break;
 460        }
 461}
 462
 463static inline void gtp_set_pktinfo_ipv4(struct gtp_pktinfo *pktinfo,
 464                                        struct sock *sk, struct iphdr *iph,
 465                                        struct pdp_ctx *pctx, struct rtable *rt,
 466                                        struct flowi4 *fl4,
 467                                        struct net_device *dev)
 468{
 469        pktinfo->sk     = sk;
 470        pktinfo->iph    = iph;
 471        pktinfo->pctx   = pctx;
 472        pktinfo->rt     = rt;
 473        pktinfo->fl4    = *fl4;
 474        pktinfo->dev    = dev;
 475}
 476
 477static int gtp_build_skb_ip4(struct sk_buff *skb, struct net_device *dev,
 478                             struct gtp_pktinfo *pktinfo)
 479{
 480        struct gtp_dev *gtp = netdev_priv(dev);
 481        struct pdp_ctx *pctx;
 482        struct rtable *rt;
 483        struct flowi4 fl4;
 484        struct iphdr *iph;
 485        struct sock *sk;
 486        __be16 df;
 487        int mtu;
 488
 489        /* Read the IP destination address and resolve the PDP context.
 490         * Prepend PDP header with TEI/TID from PDP ctx.
 491         */
 492        iph = ip_hdr(skb);
 493        pctx = ipv4_pdp_find(gtp, iph->daddr);
 494        if (!pctx) {
 495                netdev_dbg(dev, "no PDP ctx found for %pI4, skip\n",
 496                           &iph->daddr);
 497                return -ENOENT;
 498        }
 499        netdev_dbg(dev, "found PDP context %p\n", pctx);
 500
 501        switch (pctx->gtp_version) {
 502        case GTP_V0:
 503                if (gtp->sock0)
 504                        sk = gtp->sock0->sk;
 505                else
 506                        sk = NULL;
 507                break;
 508        case GTP_V1:
 509                if (gtp->sock1u)
 510                        sk = gtp->sock1u->sk;
 511                else
 512                        sk = NULL;
 513                break;
 514        default:
 515                return -ENOENT;
 516        }
 517
 518        if (!sk) {
 519                netdev_dbg(dev, "no userspace socket is available, skip\n");
 520                return -ENOENT;
 521        }
 522
 523        rt = ip4_route_output_gtp(sock_net(sk), &fl4, gtp->sock0->sk,
 524                                  pctx->sgsn_addr_ip4.s_addr);
 525        if (IS_ERR(rt)) {
 526                netdev_dbg(dev, "no route to SSGN %pI4\n",
 527                           &pctx->sgsn_addr_ip4.s_addr);
 528                dev->stats.tx_carrier_errors++;
 529                goto err;
 530        }
 531
 532        if (rt->dst.dev == dev) {
 533                netdev_dbg(dev, "circular route to SSGN %pI4\n",
 534                           &pctx->sgsn_addr_ip4.s_addr);
 535                dev->stats.collisions++;
 536                goto err_rt;
 537        }
 538
 539        skb_dst_drop(skb);
 540
 541        /* This is similar to tnl_update_pmtu(). */
 542        df = iph->frag_off;
 543        if (df) {
 544                mtu = dst_mtu(&rt->dst) - dev->hard_header_len -
 545                        sizeof(struct iphdr) - sizeof(struct udphdr);
 546                switch (pctx->gtp_version) {
 547                case GTP_V0:
 548                        mtu -= sizeof(struct gtp0_header);
 549                        break;
 550                case GTP_V1:
 551                        mtu -= sizeof(struct gtp1_header);
 552                        break;
 553                }
 554        } else {
 555                mtu = dst_mtu(&rt->dst);
 556        }
 557
 558        rt->dst.ops->update_pmtu(&rt->dst, NULL, skb, mtu);
 559
 560        if (!skb_is_gso(skb) && (iph->frag_off & htons(IP_DF)) &&
 561            mtu < ntohs(iph->tot_len)) {
 562                netdev_dbg(dev, "packet too big, fragmentation needed\n");
 563                memset(IPCB(skb), 0, sizeof(*IPCB(skb)));
 564                icmp_send(skb, ICMP_DEST_UNREACH, ICMP_FRAG_NEEDED,
 565                          htonl(mtu));
 566                goto err_rt;
 567        }
 568
 569        gtp_set_pktinfo_ipv4(pktinfo, sk, iph, pctx, rt, &fl4, dev);
 570        gtp_push_header(skb, pktinfo);
 571
 572        return 0;
 573err_rt:
 574        ip_rt_put(rt);
 575err:
 576        return -EBADMSG;
 577}
 578
 579static netdev_tx_t gtp_dev_xmit(struct sk_buff *skb, struct net_device *dev)
 580{
 581        unsigned int proto = ntohs(skb->protocol);
 582        struct gtp_pktinfo pktinfo;
 583        int err;
 584
 585        /* Ensure there is sufficient headroom. */
 586        if (skb_cow_head(skb, dev->needed_headroom))
 587                goto tx_err;
 588
 589        skb_reset_inner_headers(skb);
 590
 591        /* PDP context lookups in gtp_build_skb_*() need rcu read-side lock. */
 592        rcu_read_lock();
 593        switch (proto) {
 594        case ETH_P_IP:
 595                err = gtp_build_skb_ip4(skb, dev, &pktinfo);
 596                break;
 597        default:
 598                err = -EOPNOTSUPP;
 599                break;
 600        }
 601        rcu_read_unlock();
 602
 603        if (err < 0)
 604                goto tx_err;
 605
 606        switch (proto) {
 607        case ETH_P_IP:
 608                netdev_dbg(pktinfo.dev, "gtp -> IP src: %pI4 dst: %pI4\n",
 609                           &pktinfo.iph->saddr, &pktinfo.iph->daddr);
 610                udp_tunnel_xmit_skb(pktinfo.rt, pktinfo.sk, skb,
 611                                    pktinfo.fl4.saddr, pktinfo.fl4.daddr,
 612                                    pktinfo.iph->tos,
 613                                    ip4_dst_hoplimit(&pktinfo.rt->dst),
 614                                    0,
 615                                    pktinfo.gtph_port, pktinfo.gtph_port,
 616                                    true, false);
 617                break;
 618        }
 619
 620        return NETDEV_TX_OK;
 621tx_err:
 622        dev->stats.tx_errors++;
 623        dev_kfree_skb(skb);
 624        return NETDEV_TX_OK;
 625}
 626
 627static const struct net_device_ops gtp_netdev_ops = {
 628        .ndo_init               = gtp_dev_init,
 629        .ndo_uninit             = gtp_dev_uninit,
 630        .ndo_start_xmit         = gtp_dev_xmit,
 631        .ndo_get_stats64        = ip_tunnel_get_stats64,
 632};
 633
 634static void gtp_link_setup(struct net_device *dev)
 635{
 636        dev->netdev_ops         = &gtp_netdev_ops;
 637        dev->destructor         = free_netdev;
 638
 639        dev->hard_header_len = 0;
 640        dev->addr_len = 0;
 641
 642        /* Zero header length. */
 643        dev->type = ARPHRD_NONE;
 644        dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
 645
 646        dev->priv_flags |= IFF_NO_QUEUE;
 647        dev->features   |= NETIF_F_LLTX;
 648        netif_keep_dst(dev);
 649
 650        /* Assume largest header, ie. GTPv0. */
 651        dev->needed_headroom    = LL_MAX_HEADER +
 652                                  sizeof(struct iphdr) +
 653                                  sizeof(struct udphdr) +
 654                                  sizeof(struct gtp0_header);
 655}
 656
 657static int gtp_hashtable_new(struct gtp_dev *gtp, int hsize);
 658static void gtp_hashtable_free(struct gtp_dev *gtp);
 659static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
 660                            int fd_gtp0, int fd_gtp1);
 661
 662static int gtp_newlink(struct net *src_net, struct net_device *dev,
 663                        struct nlattr *tb[], struct nlattr *data[])
 664{
 665        int hashsize, err, fd0, fd1;
 666        struct gtp_dev *gtp;
 667        struct gtp_net *gn;
 668
 669        if (!data[IFLA_GTP_FD0] || !data[IFLA_GTP_FD1])
 670                return -EINVAL;
 671
 672        gtp = netdev_priv(dev);
 673
 674        fd0 = nla_get_u32(data[IFLA_GTP_FD0]);
 675        fd1 = nla_get_u32(data[IFLA_GTP_FD1]);
 676
 677        err = gtp_encap_enable(dev, gtp, fd0, fd1);
 678        if (err < 0)
 679                goto out_err;
 680
 681        if (!data[IFLA_GTP_PDP_HASHSIZE])
 682                hashsize = 1024;
 683        else
 684                hashsize = nla_get_u32(data[IFLA_GTP_PDP_HASHSIZE]);
 685
 686        err = gtp_hashtable_new(gtp, hashsize);
 687        if (err < 0)
 688                goto out_encap;
 689
 690        err = register_netdevice(dev);
 691        if (err < 0) {
 692                netdev_dbg(dev, "failed to register new netdev %d\n", err);
 693                goto out_hashtable;
 694        }
 695
 696        gn = net_generic(dev_net(dev), gtp_net_id);
 697        list_add_rcu(&gtp->list, &gn->gtp_dev_list);
 698
 699        netdev_dbg(dev, "registered new GTP interface\n");
 700
 701        return 0;
 702
 703out_hashtable:
 704        gtp_hashtable_free(gtp);
 705out_encap:
 706        gtp_encap_disable(gtp);
 707out_err:
 708        return err;
 709}
 710
 711static void gtp_dellink(struct net_device *dev, struct list_head *head)
 712{
 713        struct gtp_dev *gtp = netdev_priv(dev);
 714
 715        gtp_encap_disable(gtp);
 716        gtp_hashtable_free(gtp);
 717        list_del_rcu(&gtp->list);
 718        unregister_netdevice_queue(dev, head);
 719}
 720
 721static const struct nla_policy gtp_policy[IFLA_GTP_MAX + 1] = {
 722        [IFLA_GTP_FD0]                  = { .type = NLA_U32 },
 723        [IFLA_GTP_FD1]                  = { .type = NLA_U32 },
 724        [IFLA_GTP_PDP_HASHSIZE]         = { .type = NLA_U32 },
 725};
 726
 727static int gtp_validate(struct nlattr *tb[], struct nlattr *data[])
 728{
 729        if (!data)
 730                return -EINVAL;
 731
 732        return 0;
 733}
 734
 735static size_t gtp_get_size(const struct net_device *dev)
 736{
 737        return nla_total_size(sizeof(__u32));   /* IFLA_GTP_PDP_HASHSIZE */
 738}
 739
 740static int gtp_fill_info(struct sk_buff *skb, const struct net_device *dev)
 741{
 742        struct gtp_dev *gtp = netdev_priv(dev);
 743
 744        if (nla_put_u32(skb, IFLA_GTP_PDP_HASHSIZE, gtp->hash_size))
 745                goto nla_put_failure;
 746
 747        return 0;
 748
 749nla_put_failure:
 750        return -EMSGSIZE;
 751}
 752
 753static struct rtnl_link_ops gtp_link_ops __read_mostly = {
 754        .kind           = "gtp",
 755        .maxtype        = IFLA_GTP_MAX,
 756        .policy         = gtp_policy,
 757        .priv_size      = sizeof(struct gtp_dev),
 758        .setup          = gtp_link_setup,
 759        .validate       = gtp_validate,
 760        .newlink        = gtp_newlink,
 761        .dellink        = gtp_dellink,
 762        .get_size       = gtp_get_size,
 763        .fill_info      = gtp_fill_info,
 764};
 765
 766static struct net *gtp_genl_get_net(struct net *src_net, struct nlattr *tb[])
 767{
 768        struct net *net;
 769
 770        /* Examine the link attributes and figure out which network namespace
 771         * we are talking about.
 772         */
 773        if (tb[GTPA_NET_NS_FD])
 774                net = get_net_ns_by_fd(nla_get_u32(tb[GTPA_NET_NS_FD]));
 775        else
 776                net = get_net(src_net);
 777
 778        return net;
 779}
 780
 781static int gtp_hashtable_new(struct gtp_dev *gtp, int hsize)
 782{
 783        int i;
 784
 785        gtp->addr_hash = kmalloc(sizeof(struct hlist_head) * hsize, GFP_KERNEL);
 786        if (gtp->addr_hash == NULL)
 787                return -ENOMEM;
 788
 789        gtp->tid_hash = kmalloc(sizeof(struct hlist_head) * hsize, GFP_KERNEL);
 790        if (gtp->tid_hash == NULL)
 791                goto err1;
 792
 793        gtp->hash_size = hsize;
 794
 795        for (i = 0; i < hsize; i++) {
 796                INIT_HLIST_HEAD(&gtp->addr_hash[i]);
 797                INIT_HLIST_HEAD(&gtp->tid_hash[i]);
 798        }
 799        return 0;
 800err1:
 801        kfree(gtp->addr_hash);
 802        return -ENOMEM;
 803}
 804
 805static void gtp_hashtable_free(struct gtp_dev *gtp)
 806{
 807        struct pdp_ctx *pctx;
 808        int i;
 809
 810        for (i = 0; i < gtp->hash_size; i++) {
 811                hlist_for_each_entry_rcu(pctx, &gtp->tid_hash[i], hlist_tid) {
 812                        hlist_del_rcu(&pctx->hlist_tid);
 813                        hlist_del_rcu(&pctx->hlist_addr);
 814                        kfree_rcu(pctx, rcu_head);
 815                }
 816        }
 817        synchronize_rcu();
 818        kfree(gtp->addr_hash);
 819        kfree(gtp->tid_hash);
 820}
 821
 822static int gtp_encap_enable(struct net_device *dev, struct gtp_dev *gtp,
 823                            int fd_gtp0, int fd_gtp1)
 824{
 825        struct udp_tunnel_sock_cfg tuncfg = {NULL};
 826        struct socket *sock0, *sock1u;
 827        int err;
 828
 829        netdev_dbg(dev, "enable gtp on %d, %d\n", fd_gtp0, fd_gtp1);
 830
 831        sock0 = sockfd_lookup(fd_gtp0, &err);
 832        if (sock0 == NULL) {
 833                netdev_dbg(dev, "socket fd=%d not found (gtp0)\n", fd_gtp0);
 834                return -ENOENT;
 835        }
 836
 837        if (sock0->sk->sk_protocol != IPPROTO_UDP) {
 838                netdev_dbg(dev, "socket fd=%d not UDP\n", fd_gtp0);
 839                err = -EINVAL;
 840                goto err1;
 841        }
 842
 843        sock1u = sockfd_lookup(fd_gtp1, &err);
 844        if (sock1u == NULL) {
 845                netdev_dbg(dev, "socket fd=%d not found (gtp1u)\n", fd_gtp1);
 846                err = -ENOENT;
 847                goto err1;
 848        }
 849
 850        if (sock1u->sk->sk_protocol != IPPROTO_UDP) {
 851                netdev_dbg(dev, "socket fd=%d not UDP\n", fd_gtp1);
 852                err = -EINVAL;
 853                goto err2;
 854        }
 855
 856        netdev_dbg(dev, "enable gtp on %p, %p\n", sock0, sock1u);
 857
 858        gtp->sock0 = sock0;
 859        gtp->sock1u = sock1u;
 860
 861        tuncfg.sk_user_data = gtp;
 862        tuncfg.encap_rcv = gtp_encap_recv;
 863        tuncfg.encap_destroy = gtp_encap_destroy;
 864
 865        tuncfg.encap_type = UDP_ENCAP_GTP0;
 866        setup_udp_tunnel_sock(sock_net(gtp->sock0->sk), gtp->sock0, &tuncfg);
 867
 868        tuncfg.encap_type = UDP_ENCAP_GTP1U;
 869        setup_udp_tunnel_sock(sock_net(gtp->sock1u->sk), gtp->sock1u, &tuncfg);
 870
 871        err = 0;
 872err2:
 873        sockfd_put(sock1u);
 874err1:
 875        sockfd_put(sock0);
 876        return err;
 877}
 878
 879static struct net_device *gtp_find_dev(struct net *net, int ifindex)
 880{
 881        struct gtp_net *gn = net_generic(net, gtp_net_id);
 882        struct gtp_dev *gtp;
 883
 884        list_for_each_entry_rcu(gtp, &gn->gtp_dev_list, list) {
 885                if (ifindex == gtp->dev->ifindex)
 886                        return gtp->dev;
 887        }
 888        return NULL;
 889}
 890
 891static void ipv4_pdp_fill(struct pdp_ctx *pctx, struct genl_info *info)
 892{
 893        pctx->gtp_version = nla_get_u32(info->attrs[GTPA_VERSION]);
 894        pctx->af = AF_INET;
 895        pctx->sgsn_addr_ip4.s_addr =
 896                nla_get_be32(info->attrs[GTPA_SGSN_ADDRESS]);
 897        pctx->ms_addr_ip4.s_addr =
 898                nla_get_be32(info->attrs[GTPA_MS_ADDRESS]);
 899
 900        switch (pctx->gtp_version) {
 901        case GTP_V0:
 902                /* According to TS 09.60, sections 7.5.1 and 7.5.2, the flow
 903                 * label needs to be the same for uplink and downlink packets,
 904                 * so let's annotate this.
 905                 */
 906                pctx->u.v0.tid = nla_get_u64(info->attrs[GTPA_TID]);
 907                pctx->u.v0.flow = nla_get_u16(info->attrs[GTPA_FLOW]);
 908                break;
 909        case GTP_V1:
 910                pctx->u.v1.i_tei = nla_get_u32(info->attrs[GTPA_I_TEI]);
 911                pctx->u.v1.o_tei = nla_get_u32(info->attrs[GTPA_O_TEI]);
 912                break;
 913        default:
 914                break;
 915        }
 916}
 917
 918static int ipv4_pdp_add(struct net_device *dev, struct genl_info *info)
 919{
 920        struct gtp_dev *gtp = netdev_priv(dev);
 921        u32 hash_ms, hash_tid = 0;
 922        struct pdp_ctx *pctx;
 923        bool found = false;
 924        __be32 ms_addr;
 925
 926        ms_addr = nla_get_be32(info->attrs[GTPA_MS_ADDRESS]);
 927        hash_ms = ipv4_hashfn(ms_addr) % gtp->hash_size;
 928
 929        hlist_for_each_entry_rcu(pctx, &gtp->addr_hash[hash_ms], hlist_addr) {
 930                if (pctx->ms_addr_ip4.s_addr == ms_addr) {
 931                        found = true;
 932                        break;
 933                }
 934        }
 935
 936        if (found) {
 937                if (info->nlhdr->nlmsg_flags & NLM_F_EXCL)
 938                        return -EEXIST;
 939                if (info->nlhdr->nlmsg_flags & NLM_F_REPLACE)
 940                        return -EOPNOTSUPP;
 941
 942                ipv4_pdp_fill(pctx, info);
 943
 944                if (pctx->gtp_version == GTP_V0)
 945                        netdev_dbg(dev, "GTPv0-U: update tunnel id = %llx (pdp %p)\n",
 946                                   pctx->u.v0.tid, pctx);
 947                else if (pctx->gtp_version == GTP_V1)
 948                        netdev_dbg(dev, "GTPv1-U: update tunnel id = %x/%x (pdp %p)\n",
 949                                   pctx->u.v1.i_tei, pctx->u.v1.o_tei, pctx);
 950
 951                return 0;
 952
 953        }
 954
 955        pctx = kmalloc(sizeof(struct pdp_ctx), GFP_KERNEL);
 956        if (pctx == NULL)
 957                return -ENOMEM;
 958
 959        ipv4_pdp_fill(pctx, info);
 960        atomic_set(&pctx->tx_seq, 0);
 961
 962        switch (pctx->gtp_version) {
 963        case GTP_V0:
 964                /* TS 09.60: "The flow label identifies unambiguously a GTP
 965                 * flow.". We use the tid for this instead, I cannot find a
 966                 * situation in which this doesn't unambiguosly identify the
 967                 * PDP context.
 968                 */
 969                hash_tid = gtp0_hashfn(pctx->u.v0.tid) % gtp->hash_size;
 970                break;
 971        case GTP_V1:
 972                hash_tid = gtp1u_hashfn(pctx->u.v1.i_tei) % gtp->hash_size;
 973                break;
 974        }
 975
 976        hlist_add_head_rcu(&pctx->hlist_addr, &gtp->addr_hash[hash_ms]);
 977        hlist_add_head_rcu(&pctx->hlist_tid, &gtp->tid_hash[hash_tid]);
 978
 979        switch (pctx->gtp_version) {
 980        case GTP_V0:
 981                netdev_dbg(dev, "GTPv0-U: new PDP ctx id=%llx ssgn=%pI4 ms=%pI4 (pdp=%p)\n",
 982                           pctx->u.v0.tid, &pctx->sgsn_addr_ip4,
 983                           &pctx->ms_addr_ip4, pctx);
 984                break;
 985        case GTP_V1:
 986                netdev_dbg(dev, "GTPv1-U: new PDP ctx id=%x/%x ssgn=%pI4 ms=%pI4 (pdp=%p)\n",
 987                           pctx->u.v1.i_tei, pctx->u.v1.o_tei,
 988                           &pctx->sgsn_addr_ip4, &pctx->ms_addr_ip4, pctx);
 989                break;
 990        }
 991
 992        return 0;
 993}
 994
 995static int gtp_genl_new_pdp(struct sk_buff *skb, struct genl_info *info)
 996{
 997        struct net_device *dev;
 998        struct net *net;
 999
1000        if (!info->attrs[GTPA_VERSION] ||
1001            !info->attrs[GTPA_LINK] ||
1002            !info->attrs[GTPA_SGSN_ADDRESS] ||
1003            !info->attrs[GTPA_MS_ADDRESS])
1004                return -EINVAL;
1005
1006        switch (nla_get_u32(info->attrs[GTPA_VERSION])) {
1007        case GTP_V0:
1008                if (!info->attrs[GTPA_TID] ||
1009                    !info->attrs[GTPA_FLOW])
1010                        return -EINVAL;
1011                break;
1012        case GTP_V1:
1013                if (!info->attrs[GTPA_I_TEI] ||
1014                    !info->attrs[GTPA_O_TEI])
1015                        return -EINVAL;
1016                break;
1017
1018        default:
1019                return -EINVAL;
1020        }
1021
1022        net = gtp_genl_get_net(sock_net(skb->sk), info->attrs);
1023        if (IS_ERR(net))
1024                return PTR_ERR(net);
1025
1026        /* Check if there's an existing gtpX device to configure */
1027        dev = gtp_find_dev(net, nla_get_u32(info->attrs[GTPA_LINK]));
1028        if (dev == NULL) {
1029                put_net(net);
1030                return -ENODEV;
1031        }
1032        put_net(net);
1033
1034        return ipv4_pdp_add(dev, info);
1035}
1036
1037static int gtp_genl_del_pdp(struct sk_buff *skb, struct genl_info *info)
1038{
1039        struct net_device *dev;
1040        struct pdp_ctx *pctx;
1041        struct gtp_dev *gtp;
1042        struct net *net;
1043
1044        if (!info->attrs[GTPA_VERSION] ||
1045            !info->attrs[GTPA_LINK])
1046                return -EINVAL;
1047
1048        net = gtp_genl_get_net(sock_net(skb->sk), info->attrs);
1049        if (IS_ERR(net))
1050                return PTR_ERR(net);
1051
1052        /* Check if there's an existing gtpX device to configure */
1053        dev = gtp_find_dev(net, nla_get_u32(info->attrs[GTPA_LINK]));
1054        if (dev == NULL) {
1055                put_net(net);
1056                return -ENODEV;
1057        }
1058        put_net(net);
1059
1060        gtp = netdev_priv(dev);
1061
1062        switch (nla_get_u32(info->attrs[GTPA_VERSION])) {
1063        case GTP_V0:
1064                if (!info->attrs[GTPA_TID])
1065                        return -EINVAL;
1066                pctx = gtp0_pdp_find(gtp, nla_get_u64(info->attrs[GTPA_TID]));
1067                break;
1068        case GTP_V1:
1069                if (!info->attrs[GTPA_I_TEI])
1070                        return -EINVAL;
1071                pctx = gtp1_pdp_find(gtp, nla_get_u64(info->attrs[GTPA_I_TEI]));
1072                break;
1073
1074        default:
1075                return -EINVAL;
1076        }
1077
1078        if (pctx == NULL)
1079                return -ENOENT;
1080
1081        if (pctx->gtp_version == GTP_V0)
1082                netdev_dbg(dev, "GTPv0-U: deleting tunnel id = %llx (pdp %p)\n",
1083                           pctx->u.v0.tid, pctx);
1084        else if (pctx->gtp_version == GTP_V1)
1085                netdev_dbg(dev, "GTPv1-U: deleting tunnel id = %x/%x (pdp %p)\n",
1086                           pctx->u.v1.i_tei, pctx->u.v1.o_tei, pctx);
1087
1088        hlist_del_rcu(&pctx->hlist_tid);
1089        hlist_del_rcu(&pctx->hlist_addr);
1090        kfree_rcu(pctx, rcu_head);
1091
1092        return 0;
1093}
1094
1095static struct genl_family gtp_genl_family;
1096
1097static int gtp_genl_fill_info(struct sk_buff *skb, u32 snd_portid, u32 snd_seq,
1098                              u32 type, struct pdp_ctx *pctx)
1099{
1100        void *genlh;
1101
1102        genlh = genlmsg_put(skb, snd_portid, snd_seq, &gtp_genl_family, 0,
1103                            type);
1104        if (genlh == NULL)
1105                goto nlmsg_failure;
1106
1107        if (nla_put_u32(skb, GTPA_VERSION, pctx->gtp_version) ||
1108            nla_put_be32(skb, GTPA_SGSN_ADDRESS, pctx->sgsn_addr_ip4.s_addr) ||
1109            nla_put_be32(skb, GTPA_MS_ADDRESS, pctx->ms_addr_ip4.s_addr))
1110                goto nla_put_failure;
1111
1112        switch (pctx->gtp_version) {
1113        case GTP_V0:
1114                if (nla_put_u64_64bit(skb, GTPA_TID, pctx->u.v0.tid, GTPA_PAD) ||
1115                    nla_put_u16(skb, GTPA_FLOW, pctx->u.v0.flow))
1116                        goto nla_put_failure;
1117                break;
1118        case GTP_V1:
1119                if (nla_put_u32(skb, GTPA_I_TEI, pctx->u.v1.i_tei) ||
1120                    nla_put_u32(skb, GTPA_O_TEI, pctx->u.v1.o_tei))
1121                        goto nla_put_failure;
1122                break;
1123        }
1124        genlmsg_end(skb, genlh);
1125        return 0;
1126
1127nlmsg_failure:
1128nla_put_failure:
1129        genlmsg_cancel(skb, genlh);
1130        return -EMSGSIZE;
1131}
1132
1133static int gtp_genl_get_pdp(struct sk_buff *skb, struct genl_info *info)
1134{
1135        struct pdp_ctx *pctx = NULL;
1136        struct net_device *dev;
1137        struct sk_buff *skb2;
1138        struct gtp_dev *gtp;
1139        u32 gtp_version;
1140        struct net *net;
1141        int err;
1142
1143        if (!info->attrs[GTPA_VERSION] ||
1144            !info->attrs[GTPA_LINK])
1145                return -EINVAL;
1146
1147        gtp_version = nla_get_u32(info->attrs[GTPA_VERSION]);
1148        switch (gtp_version) {
1149        case GTP_V0:
1150        case GTP_V1:
1151                break;
1152        default:
1153                return -EINVAL;
1154        }
1155
1156        net = gtp_genl_get_net(sock_net(skb->sk), info->attrs);
1157        if (IS_ERR(net))
1158                return PTR_ERR(net);
1159
1160        /* Check if there's an existing gtpX device to configure */
1161        dev = gtp_find_dev(net, nla_get_u32(info->attrs[GTPA_LINK]));
1162        if (dev == NULL) {
1163                put_net(net);
1164                return -ENODEV;
1165        }
1166        put_net(net);
1167
1168        gtp = netdev_priv(dev);
1169
1170        rcu_read_lock();
1171        if (gtp_version == GTP_V0 &&
1172            info->attrs[GTPA_TID]) {
1173                u64 tid = nla_get_u64(info->attrs[GTPA_TID]);
1174
1175                pctx = gtp0_pdp_find(gtp, tid);
1176        } else if (gtp_version == GTP_V1 &&
1177                 info->attrs[GTPA_I_TEI]) {
1178                u32 tid = nla_get_u32(info->attrs[GTPA_I_TEI]);
1179
1180                pctx = gtp1_pdp_find(gtp, tid);
1181        } else if (info->attrs[GTPA_MS_ADDRESS]) {
1182                __be32 ip = nla_get_be32(info->attrs[GTPA_MS_ADDRESS]);
1183
1184                pctx = ipv4_pdp_find(gtp, ip);
1185        }
1186
1187        if (pctx == NULL) {
1188                err = -ENOENT;
1189                goto err_unlock;
1190        }
1191
1192        skb2 = genlmsg_new(NLMSG_GOODSIZE, GFP_ATOMIC);
1193        if (skb2 == NULL) {
1194                err = -ENOMEM;
1195                goto err_unlock;
1196        }
1197
1198        err = gtp_genl_fill_info(skb2, NETLINK_CB(skb).portid,
1199                                 info->snd_seq, info->nlhdr->nlmsg_type, pctx);
1200        if (err < 0)
1201                goto err_unlock_free;
1202
1203        rcu_read_unlock();
1204        return genlmsg_unicast(genl_info_net(info), skb2, info->snd_portid);
1205
1206err_unlock_free:
1207        kfree_skb(skb2);
1208err_unlock:
1209        rcu_read_unlock();
1210        return err;
1211}
1212
1213static int gtp_genl_dump_pdp(struct sk_buff *skb,
1214                                struct netlink_callback *cb)
1215{
1216        struct gtp_dev *last_gtp = (struct gtp_dev *)cb->args[2], *gtp;
1217        struct net *net = sock_net(skb->sk);
1218        struct gtp_net *gn = net_generic(net, gtp_net_id);
1219        unsigned long tid = cb->args[1];
1220        int i, k = cb->args[0], ret;
1221        struct pdp_ctx *pctx;
1222
1223        if (cb->args[4])
1224                return 0;
1225
1226        list_for_each_entry_rcu(gtp, &gn->gtp_dev_list, list) {
1227                if (last_gtp && last_gtp != gtp)
1228                        continue;
1229                else
1230                        last_gtp = NULL;
1231
1232                for (i = k; i < gtp->hash_size; i++) {
1233                        hlist_for_each_entry_rcu(pctx, &gtp->tid_hash[i], hlist_tid) {
1234                                if (tid && tid != pctx->u.tid)
1235                                        continue;
1236                                else
1237                                        tid = 0;
1238
1239                                ret = gtp_genl_fill_info(skb,
1240                                                         NETLINK_CB(cb->skb).portid,
1241                                                         cb->nlh->nlmsg_seq,
1242                                                         cb->nlh->nlmsg_type, pctx);
1243                                if (ret < 0) {
1244                                        cb->args[0] = i;
1245                                        cb->args[1] = pctx->u.tid;
1246                                        cb->args[2] = (unsigned long)gtp;
1247                                        goto out;
1248                                }
1249                        }
1250                }
1251        }
1252        cb->args[4] = 1;
1253out:
1254        return skb->len;
1255}
1256
1257static struct nla_policy gtp_genl_policy[GTPA_MAX + 1] = {
1258        [GTPA_LINK]             = { .type = NLA_U32, },
1259        [GTPA_VERSION]          = { .type = NLA_U32, },
1260        [GTPA_TID]              = { .type = NLA_U64, },
1261        [GTPA_SGSN_ADDRESS]     = { .type = NLA_U32, },
1262        [GTPA_MS_ADDRESS]       = { .type = NLA_U32, },
1263        [GTPA_FLOW]             = { .type = NLA_U16, },
1264        [GTPA_NET_NS_FD]        = { .type = NLA_U32, },
1265        [GTPA_I_TEI]            = { .type = NLA_U32, },
1266        [GTPA_O_TEI]            = { .type = NLA_U32, },
1267};
1268
1269static const struct genl_ops gtp_genl_ops[] = {
1270        {
1271                .cmd = GTP_CMD_NEWPDP,
1272                .doit = gtp_genl_new_pdp,
1273                .policy = gtp_genl_policy,
1274                .flags = GENL_ADMIN_PERM,
1275        },
1276        {
1277                .cmd = GTP_CMD_DELPDP,
1278                .doit = gtp_genl_del_pdp,
1279                .policy = gtp_genl_policy,
1280                .flags = GENL_ADMIN_PERM,
1281        },
1282        {
1283                .cmd = GTP_CMD_GETPDP,
1284                .doit = gtp_genl_get_pdp,
1285                .dumpit = gtp_genl_dump_pdp,
1286                .policy = gtp_genl_policy,
1287                .flags = GENL_ADMIN_PERM,
1288        },
1289};
1290
1291static struct genl_family gtp_genl_family __ro_after_init = {
1292        .name           = "gtp",
1293        .version        = 0,
1294        .hdrsize        = 0,
1295        .maxattr        = GTPA_MAX,
1296        .netnsok        = true,
1297        .module         = THIS_MODULE,
1298        .ops            = gtp_genl_ops,
1299        .n_ops          = ARRAY_SIZE(gtp_genl_ops),
1300};
1301
1302static int __net_init gtp_net_init(struct net *net)
1303{
1304        struct gtp_net *gn = net_generic(net, gtp_net_id);
1305
1306        INIT_LIST_HEAD(&gn->gtp_dev_list);
1307        return 0;
1308}
1309
1310static void __net_exit gtp_net_exit(struct net *net)
1311{
1312        struct gtp_net *gn = net_generic(net, gtp_net_id);
1313        struct gtp_dev *gtp;
1314        LIST_HEAD(list);
1315
1316        rtnl_lock();
1317        list_for_each_entry(gtp, &gn->gtp_dev_list, list)
1318                gtp_dellink(gtp->dev, &list);
1319
1320        unregister_netdevice_many(&list);
1321        rtnl_unlock();
1322}
1323
1324static struct pernet_operations gtp_net_ops = {
1325        .init   = gtp_net_init,
1326        .exit   = gtp_net_exit,
1327        .id     = &gtp_net_id,
1328        .size   = sizeof(struct gtp_net),
1329};
1330
1331static int __init gtp_init(void)
1332{
1333        int err;
1334
1335        get_random_bytes(&gtp_h_initval, sizeof(gtp_h_initval));
1336
1337        err = rtnl_link_register(&gtp_link_ops);
1338        if (err < 0)
1339                goto error_out;
1340
1341        err = genl_register_family(&gtp_genl_family);
1342        if (err < 0)
1343                goto unreg_rtnl_link;
1344
1345        err = register_pernet_subsys(&gtp_net_ops);
1346        if (err < 0)
1347                goto unreg_genl_family;
1348
1349        pr_info("GTP module loaded (pdp ctx size %Zd bytes)\n",
1350                sizeof(struct pdp_ctx));
1351        return 0;
1352
1353unreg_genl_family:
1354        genl_unregister_family(&gtp_genl_family);
1355unreg_rtnl_link:
1356        rtnl_link_unregister(&gtp_link_ops);
1357error_out:
1358        pr_err("error loading GTP module loaded\n");
1359        return err;
1360}
1361late_initcall(gtp_init);
1362
1363static void __exit gtp_fini(void)
1364{
1365        unregister_pernet_subsys(&gtp_net_ops);
1366        genl_unregister_family(&gtp_genl_family);
1367        rtnl_link_unregister(&gtp_link_ops);
1368
1369        pr_info("GTP module unloaded\n");
1370}
1371module_exit(gtp_fini);
1372
1373MODULE_LICENSE("GPL");
1374MODULE_AUTHOR("Harald Welte <hwelte@sysmocom.de>");
1375MODULE_DESCRIPTION("Interface driver for GTP encapsulated traffic");
1376MODULE_ALIAS_RTNL_LINK("gtp");
1377MODULE_ALIAS_GENL_FAMILY("gtp");
1378