1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * GENEVE: Generic Network Virtualization Encapsulation 4 * 5 * Copyright (c) 2015 Red Hat, Inc. 6 */ 7 8 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 9 10 #include <linux/ethtool.h> 11 #include <linux/kernel.h> 12 #include <linux/module.h> 13 #include <linux/etherdevice.h> 14 #include <linux/hash.h> 15 #include <net/dst_metadata.h> 16 #include <net/gro_cells.h> 17 #include <net/rtnetlink.h> 18 #include <net/geneve.h> 19 #include <net/gro.h> 20 #include <net/netdev_lock.h> 21 #include <net/protocol.h> 22 23 #define GENEVE_NETDEV_VER "0.6" 24 25 #define GENEVE_N_VID (1u << 24) 26 #define GENEVE_VID_MASK (GENEVE_N_VID - 1) 27 28 #define VNI_HASH_BITS 10 29 #define VNI_HASH_SIZE (1<<VNI_HASH_BITS) 30 31 static bool log_ecn_error = true; 32 module_param(log_ecn_error, bool, 0644); 33 MODULE_PARM_DESC(log_ecn_error, "Log packets received with corrupted ECN"); 34 35 #define GENEVE_VER 0 36 #define GENEVE_BASE_HLEN (sizeof(struct udphdr) + sizeof(struct genevehdr)) 37 #define GENEVE_IPV4_HLEN (ETH_HLEN + sizeof(struct iphdr) + GENEVE_BASE_HLEN) 38 #define GENEVE_IPV6_HLEN (ETH_HLEN + sizeof(struct ipv6hdr) + GENEVE_BASE_HLEN) 39 40 #define GENEVE_OPT_NETDEV_CLASS 0x100 41 #define GENEVE_OPT_GRO_HINT_SIZE 8 42 #define GENEVE_OPT_GRO_HINT_TYPE 1 43 #define GENEVE_OPT_GRO_HINT_LEN 1 44 45 struct geneve_opt_gro_hint { 46 #if defined(__LITTLE_ENDIAN_BITFIELD) 47 u8 inner_proto_id:2, 48 nested_is_v6:1, 49 rsvd:5; 50 #elif defined(__BIG_ENDIAN_BITFIELD) 51 u8 rsvd:5, 52 nested_is_v6:1, 53 inner_proto_id:2; 54 #else 55 #error "Please fix <asm/byteorder.h>" 56 #endif 57 u8 nested_nh_offset; 58 u8 nested_tp_offset; 59 u8 nested_hdr_len; 60 }; 61 62 struct geneve_skb_cb { 63 unsigned int gro_hint_len; 64 struct geneve_opt_gro_hint gro_hint; 65 }; 66 67 #define GENEVE_SKB_CB(__skb) ((struct geneve_skb_cb *)&((__skb)->cb[0])) 68 69 /* per-network namespace private data for this module */ 70 struct geneve_net { 71 struct list_head geneve_list; 72 /* sock_list is protected by rtnl lock */ 73 struct list_head sock_list; 74 }; 75 76 static unsigned int geneve_net_id; 77 78 struct geneve_dev_node { 79 struct hlist_node hlist; 80 struct geneve_dev *geneve; 81 }; 82 83 struct geneve_config { 84 bool collect_md; 85 bool dualstack; 86 bool use_udp6_rx_checksums; 87 bool ttl_inherit; 88 bool gro_hint; 89 enum ifla_geneve_df df; 90 bool inner_proto_inherit; 91 u16 port_min; 92 u16 port_max; 93 94 /* Must be last --ends in a flexible-array member. */ 95 struct ip_tunnel_info info; 96 }; 97 98 /* Pseudo network device */ 99 struct geneve_dev { 100 struct geneve_dev_node hlist4; /* vni hash table for IPv4 socket */ 101 #if IS_ENABLED(CONFIG_IPV6) 102 struct geneve_dev_node hlist6; /* vni hash table for IPv6 socket */ 103 #endif 104 struct net *net; /* netns for packet i/o */ 105 struct net_device *dev; /* netdev for geneve tunnel */ 106 struct geneve_sock __rcu *sock4; /* IPv4 socket used for geneve tunnel */ 107 #if IS_ENABLED(CONFIG_IPV6) 108 struct geneve_sock __rcu *sock6; /* IPv6 socket used for geneve tunnel */ 109 #endif 110 struct list_head next; /* geneve's per namespace list */ 111 struct gro_cells gro_cells; 112 struct geneve_config cfg; 113 }; 114 115 struct geneve_sock { 116 bool collect_md; 117 bool gro_hint; 118 struct list_head list; 119 struct sock *sk; 120 struct rcu_head rcu; 121 int refcnt; 122 struct hlist_head vni_list[VNI_HASH_SIZE]; 123 }; 124 125 static const __be16 proto_id_map[] = { htons(ETH_P_TEB), 126 htons(ETH_P_IPV6), 127 htons(ETH_P_IP) }; 128 129 static int proto_to_id(__be16 proto) 130 { 131 int i; 132 133 for (i = 0; i < ARRAY_SIZE(proto_id_map); i++) 134 if (proto_id_map[i] == proto) 135 return i; 136 137 return -1; 138 } 139 140 static inline __u32 geneve_net_vni_hash(u8 vni[3]) 141 { 142 __u32 vnid; 143 144 vnid = (vni[0] << 16) | (vni[1] << 8) | vni[2]; 145 return hash_32(vnid, VNI_HASH_BITS); 146 } 147 148 static __be64 vni_to_tunnel_id(const __u8 *vni) 149 { 150 #ifdef __BIG_ENDIAN 151 return (vni[0] << 16) | (vni[1] << 8) | vni[2]; 152 #else 153 return (__force __be64)(((__force u64)vni[0] << 40) | 154 ((__force u64)vni[1] << 48) | 155 ((__force u64)vni[2] << 56)); 156 #endif 157 } 158 159 /* Convert 64 bit tunnel ID to 24 bit VNI. */ 160 static void tunnel_id_to_vni(__be64 tun_id, __u8 *vni) 161 { 162 #ifdef __BIG_ENDIAN 163 vni[0] = (__force __u8)(tun_id >> 16); 164 vni[1] = (__force __u8)(tun_id >> 8); 165 vni[2] = (__force __u8)tun_id; 166 #else 167 vni[0] = (__force __u8)((__force u64)tun_id >> 40); 168 vni[1] = (__force __u8)((__force u64)tun_id >> 48); 169 vni[2] = (__force __u8)((__force u64)tun_id >> 56); 170 #endif 171 } 172 173 static bool eq_tun_id_and_vni(u8 *tun_id, u8 *vni) 174 { 175 return !memcmp(vni, &tun_id[5], 3); 176 } 177 178 static sa_family_t geneve_get_sk_family(struct geneve_sock *gs) 179 { 180 return gs->sk->sk_family; 181 } 182 183 static struct geneve_dev *geneve_lookup(struct geneve_sock *gs, 184 __be32 addr, u8 vni[]) 185 { 186 struct hlist_head *vni_list_head; 187 struct geneve_dev_node *node; 188 __u32 hash; 189 190 /* Find the device for this VNI */ 191 hash = geneve_net_vni_hash(vni); 192 vni_list_head = &gs->vni_list[hash]; 193 hlist_for_each_entry_rcu(node, vni_list_head, hlist) { 194 if (eq_tun_id_and_vni((u8 *)&node->geneve->cfg.info.key.tun_id, vni) && 195 addr == node->geneve->cfg.info.key.u.ipv4.dst) 196 return node->geneve; 197 } 198 return NULL; 199 } 200 201 #if IS_ENABLED(CONFIG_IPV6) 202 static struct geneve_dev *geneve6_lookup(struct geneve_sock *gs, 203 struct in6_addr addr6, u8 vni[]) 204 { 205 struct hlist_head *vni_list_head; 206 struct geneve_dev_node *node; 207 __u32 hash; 208 209 /* Find the device for this VNI */ 210 hash = geneve_net_vni_hash(vni); 211 vni_list_head = &gs->vni_list[hash]; 212 hlist_for_each_entry_rcu(node, vni_list_head, hlist) { 213 if (eq_tun_id_and_vni((u8 *)&node->geneve->cfg.info.key.tun_id, vni) && 214 ipv6_addr_equal(&addr6, &node->geneve->cfg.info.key.u.ipv6.dst)) 215 return node->geneve; 216 } 217 return NULL; 218 } 219 #endif 220 221 static inline struct genevehdr *geneve_hdr(const struct sk_buff *skb) 222 { 223 return (struct genevehdr *)(udp_hdr(skb) + 1); 224 } 225 226 static struct geneve_dev *geneve_lookup_skb(struct geneve_sock *gs, 227 struct sk_buff *skb) 228 { 229 static u8 zero_vni[3]; 230 u8 *vni; 231 232 if (geneve_get_sk_family(gs) == AF_INET) { 233 struct iphdr *iph; 234 __be32 addr; 235 236 iph = ip_hdr(skb); /* outer IP header... */ 237 238 if (gs->collect_md) { 239 vni = zero_vni; 240 addr = 0; 241 } else { 242 vni = geneve_hdr(skb)->vni; 243 addr = iph->saddr; 244 } 245 246 return geneve_lookup(gs, addr, vni); 247 #if IS_ENABLED(CONFIG_IPV6) 248 } else if (geneve_get_sk_family(gs) == AF_INET6) { 249 static struct in6_addr zero_addr6; 250 struct ipv6hdr *ip6h; 251 struct in6_addr addr6; 252 253 ip6h = ipv6_hdr(skb); /* outer IPv6 header... */ 254 255 if (gs->collect_md) { 256 vni = zero_vni; 257 addr6 = zero_addr6; 258 } else { 259 vni = geneve_hdr(skb)->vni; 260 addr6 = ip6h->saddr; 261 } 262 263 return geneve6_lookup(gs, addr6, vni); 264 #endif 265 } 266 return NULL; 267 } 268 269 /* geneve receive/decap routine */ 270 static void geneve_rx(struct geneve_dev *geneve, struct geneve_sock *gs, 271 struct sk_buff *skb, const struct genevehdr *gnvh) 272 { 273 struct metadata_dst *tun_dst = NULL; 274 unsigned int len; 275 int nh, err = 0; 276 void *oiph; 277 278 if (ip_tunnel_collect_metadata() || gs->collect_md) { 279 IP_TUNNEL_DECLARE_FLAGS(flags) = { }; 280 281 __set_bit(IP_TUNNEL_KEY_BIT, flags); 282 __assign_bit(IP_TUNNEL_OAM_BIT, flags, gnvh->oam); 283 __assign_bit(IP_TUNNEL_CRIT_OPT_BIT, flags, gnvh->critical); 284 285 tun_dst = udp_tun_rx_dst(skb, geneve_get_sk_family(gs), flags, 286 vni_to_tunnel_id(gnvh->vni), 287 gnvh->opt_len * 4); 288 if (!tun_dst) { 289 dev_dstats_rx_dropped(geneve->dev); 290 goto drop; 291 } 292 /* Update tunnel dst according to Geneve options. */ 293 ip_tunnel_flags_zero(flags); 294 __set_bit(IP_TUNNEL_GENEVE_OPT_BIT, flags); 295 ip_tunnel_info_opts_set(&tun_dst->u.tun_info, 296 gnvh->options, gnvh->opt_len * 4, 297 flags); 298 } else { 299 /* Drop packets w/ critical options, 300 * since we don't support any... 301 */ 302 if (gnvh->critical) { 303 DEV_STATS_INC(geneve->dev, rx_frame_errors); 304 DEV_STATS_INC(geneve->dev, rx_errors); 305 goto drop; 306 } 307 } 308 309 if (tun_dst) 310 skb_dst_set(skb, &tun_dst->dst); 311 312 if (gnvh->proto_type == htons(ETH_P_TEB)) { 313 skb_reset_mac_header(skb); 314 skb->protocol = eth_type_trans(skb, geneve->dev); 315 skb_postpull_rcsum(skb, eth_hdr(skb), ETH_HLEN); 316 317 /* Ignore packet loops (and multicast echo) */ 318 if (ether_addr_equal(eth_hdr(skb)->h_source, 319 geneve->dev->dev_addr)) { 320 DEV_STATS_INC(geneve->dev, rx_errors); 321 goto drop; 322 } 323 } else { 324 skb_reset_mac_header(skb); 325 skb->dev = geneve->dev; 326 skb->pkt_type = PACKET_HOST; 327 } 328 329 /* Save offset of outer header relative to skb->head, 330 * because we are going to reset the network header to the inner header 331 * and might change skb->head. 332 */ 333 nh = skb_network_header(skb) - skb->head; 334 335 skb_reset_network_header(skb); 336 337 if (!pskb_inet_may_pull(skb)) { 338 DEV_STATS_INC(geneve->dev, rx_length_errors); 339 DEV_STATS_INC(geneve->dev, rx_errors); 340 goto drop; 341 } 342 343 /* Get the outer header. */ 344 oiph = skb->head + nh; 345 346 if (geneve_get_sk_family(gs) == AF_INET) 347 err = IP_ECN_decapsulate(oiph, skb); 348 #if IS_ENABLED(CONFIG_IPV6) 349 else 350 err = IP6_ECN_decapsulate(oiph, skb); 351 #endif 352 353 if (unlikely(err)) { 354 if (log_ecn_error) { 355 if (geneve_get_sk_family(gs) == AF_INET) 356 net_info_ratelimited("non-ECT from %pI4 " 357 "with TOS=%#x\n", 358 &((struct iphdr *)oiph)->saddr, 359 ((struct iphdr *)oiph)->tos); 360 #if IS_ENABLED(CONFIG_IPV6) 361 else 362 net_info_ratelimited("non-ECT from %pI6\n", 363 &((struct ipv6hdr *)oiph)->saddr); 364 #endif 365 } 366 if (err > 1) { 367 DEV_STATS_INC(geneve->dev, rx_frame_errors); 368 DEV_STATS_INC(geneve->dev, rx_errors); 369 goto drop; 370 } 371 } 372 373 /* Skip the additional GRO stage when hints are in use. */ 374 len = skb->len; 375 if (skb->encapsulation) 376 err = netif_rx(skb); 377 else 378 err = gro_cells_receive(&geneve->gro_cells, skb); 379 if (likely(err == NET_RX_SUCCESS)) 380 dev_dstats_rx_add(geneve->dev, len); 381 382 return; 383 drop: 384 /* Consume bad packet */ 385 kfree_skb(skb); 386 } 387 388 /* Setup stats when device is created */ 389 static int geneve_init(struct net_device *dev) 390 { 391 struct geneve_dev *geneve = netdev_priv(dev); 392 int err; 393 394 err = gro_cells_init(&geneve->gro_cells, dev); 395 if (err) 396 return err; 397 398 err = dst_cache_init(&geneve->cfg.info.dst_cache, GFP_KERNEL); 399 if (err) { 400 gro_cells_destroy(&geneve->gro_cells); 401 return err; 402 } 403 netdev_lockdep_set_classes(dev); 404 return 0; 405 } 406 407 static void geneve_uninit(struct net_device *dev) 408 { 409 struct geneve_dev *geneve = netdev_priv(dev); 410 411 dst_cache_destroy(&geneve->cfg.info.dst_cache); 412 gro_cells_destroy(&geneve->gro_cells); 413 } 414 415 static int geneve_hlen(const struct genevehdr *gh) 416 { 417 return sizeof(*gh) + gh->opt_len * 4; 418 } 419 420 /* 421 * Look for GRO hint in the genenve options; if not found or does not pass basic 422 * sanitization return 0, otherwise the offset WRT the geneve hdr start. 423 */ 424 static unsigned int 425 geneve_opt_gro_hint_off(const struct genevehdr *gh, __be16 *type, 426 unsigned int *gh_len) 427 { 428 struct geneve_opt *opt = (void *)(gh + 1); 429 unsigned int id, opt_len = gh->opt_len; 430 struct geneve_opt_gro_hint *gro_hint; 431 432 while (opt_len >= (GENEVE_OPT_GRO_HINT_SIZE >> 2)) { 433 if (opt->opt_class == htons(GENEVE_OPT_NETDEV_CLASS) && 434 opt->type == GENEVE_OPT_GRO_HINT_TYPE && 435 opt->length == GENEVE_OPT_GRO_HINT_LEN) 436 goto found; 437 438 /* check for bad opt len */ 439 if (opt->length + 1 >= opt_len) 440 return 0; 441 442 /* next opt */ 443 opt_len -= opt->length + 1; 444 opt = ((void *)opt) + ((opt->length + 1) << 2); 445 } 446 return 0; 447 448 found: 449 gro_hint = (struct geneve_opt_gro_hint *)opt->opt_data; 450 451 /* 452 * Sanitize the hinted hdrs: the nested transport is UDP and must fit 453 * the overall hinted hdr size. 454 */ 455 if (gro_hint->nested_tp_offset + sizeof(struct udphdr) > 456 gro_hint->nested_hdr_len) 457 return 0; 458 459 if (gro_hint->nested_nh_offset + 460 (gro_hint->nested_is_v6 ? sizeof(struct ipv6hdr) : 461 sizeof(struct iphdr)) > 462 gro_hint->nested_tp_offset) 463 return 0; 464 465 /* Allow only supported L2. */ 466 id = gro_hint->inner_proto_id; 467 if (id >= ARRAY_SIZE(proto_id_map)) 468 return 0; 469 470 *type = proto_id_map[id]; 471 *gh_len += gro_hint->nested_hdr_len; 472 473 return (void *)gro_hint - (void *)gh; 474 } 475 476 static const struct geneve_opt_gro_hint * 477 geneve_opt_gro_hint(const struct genevehdr *gh, unsigned int hint_off) 478 { 479 return (const struct geneve_opt_gro_hint *)((void *)gh + hint_off); 480 } 481 482 static unsigned int 483 geneve_sk_gro_hint_off(const struct sock *sk, const struct genevehdr *gh, 484 __be16 *type, unsigned int *gh_len) 485 { 486 const struct geneve_sock *gs = rcu_dereference_sk_user_data(sk); 487 488 if (!gs || !gs->gro_hint) 489 return 0; 490 return geneve_opt_gro_hint_off(gh, type, gh_len); 491 } 492 493 /* Validate the packet headers pointed by data WRT the provided hint */ 494 static bool 495 geneve_opt_gro_hint_validate(void *data, 496 const struct geneve_opt_gro_hint *gro_hint) 497 { 498 void *nested_nh = data + gro_hint->nested_nh_offset; 499 struct iphdr *iph; 500 501 if (gro_hint->nested_is_v6) { 502 struct ipv6hdr *ipv6h = nested_nh; 503 struct ipv6_opt_hdr *opth; 504 int offset, len; 505 506 if (ipv6h->nexthdr == IPPROTO_UDP) 507 return true; 508 509 offset = sizeof(*ipv6h) + gro_hint->nested_nh_offset; 510 while (offset + sizeof(*opth) <= gro_hint->nested_tp_offset) { 511 opth = data + offset; 512 513 len = ipv6_optlen(opth); 514 if (len + offset > gro_hint->nested_tp_offset) 515 return false; 516 if (opth->nexthdr == IPPROTO_UDP) 517 return true; 518 519 offset += len; 520 } 521 return false; 522 } 523 524 iph = nested_nh; 525 if (*(u8 *)iph != 0x45 || ip_is_fragment(iph) || 526 iph->protocol != IPPROTO_UDP || ip_fast_csum((u8 *)iph, 5)) 527 return false; 528 529 return true; 530 } 531 532 /* 533 * Validate the skb headers following the specified geneve hdr vs the 534 * provided hint, including nested L4 checksum. 535 * The caller already ensured that the relevant amount of data is available 536 * in the linear part. 537 */ 538 static bool 539 geneve_opt_gro_hint_validate_csum(const struct sk_buff *skb, 540 const struct genevehdr *gh, 541 const struct geneve_opt_gro_hint *gro_hint) 542 { 543 unsigned int plen, gh_len = geneve_hlen(gh); 544 void *nested = (void *)gh + gh_len; 545 struct udphdr *nested_uh; 546 unsigned int nested_len; 547 struct ipv6hdr *ipv6h; 548 struct iphdr *iph; 549 __wsum csum, psum; 550 551 if (!geneve_opt_gro_hint_validate(nested, gro_hint)) 552 return false; 553 554 /* Use GRO hints with nested csum only if the outer header has csum. */ 555 nested_uh = nested + gro_hint->nested_tp_offset; 556 if (!nested_uh->check || skb->ip_summed == CHECKSUM_PARTIAL) 557 return true; 558 559 if (!NAPI_GRO_CB(skb)->csum_valid) 560 return false; 561 562 /* Compute the complete checksum up to the nested transport. */ 563 plen = gh_len + gro_hint->nested_tp_offset; 564 csum = csum_sub(NAPI_GRO_CB(skb)->csum, csum_partial(gh, plen, 0)); 565 nested_len = skb_gro_len(skb) - plen; 566 567 /* Compute the nested pseudo header csum. */ 568 ipv6h = nested + gro_hint->nested_nh_offset; 569 iph = (struct iphdr *)ipv6h; 570 psum = gro_hint->nested_is_v6 ? 571 ~csum_unfold(csum_ipv6_magic(&ipv6h->saddr, &ipv6h->daddr, 572 nested_len, IPPROTO_UDP, 0)) : 573 csum_tcpudp_nofold(iph->saddr, iph->daddr, 574 nested_len, IPPROTO_UDP, 0); 575 576 return !csum_fold(csum_add(psum, csum)); 577 } 578 579 static int geneve_post_decap_hint(const struct sock *sk, struct sk_buff *skb, 580 unsigned int gh_len, 581 struct genevehdr **geneveh) 582 { 583 const struct geneve_opt_gro_hint *gro_hint; 584 unsigned int len, total_len, hint_off; 585 struct ipv6hdr *ipv6h; 586 struct iphdr *iph; 587 struct udphdr *uh; 588 __be16 p; 589 int err; 590 591 hint_off = geneve_sk_gro_hint_off(sk, *geneveh, &p, &len); 592 if (!hint_off) 593 return 0; 594 595 if (!skb_is_gso(skb)) 596 return 0; 597 598 gro_hint = geneve_opt_gro_hint(*geneveh, hint_off); 599 if (unlikely(!pskb_may_pull(skb, gro_hint->nested_hdr_len))) 600 return -ENOMEM; 601 602 *geneveh = geneve_hdr(skb); 603 gro_hint = geneve_opt_gro_hint(*geneveh, hint_off); 604 605 /* 606 * Validate hints from untrusted source before accessing 607 * the headers; csum will be checked later by the nested 608 * protocol rx path. 609 */ 610 if (unlikely(skb_shinfo(skb)->gso_type & SKB_GSO_DODGY && 611 !geneve_opt_gro_hint_validate(skb->data, gro_hint))) 612 return -EINVAL; 613 614 total_len = skb->len - gro_hint->nested_nh_offset; 615 if (total_len >= GRO_LEGACY_MAX_SIZE) 616 return -E2BIG; 617 618 err = skb_ensure_writable(skb, gro_hint->nested_tp_offset + sizeof(*uh)); 619 if (unlikely(err)) 620 return err; 621 622 *geneveh = geneve_hdr(skb); 623 gro_hint = geneve_opt_gro_hint(*geneveh, hint_off); 624 625 ipv6h = (void *)skb->data + gro_hint->nested_nh_offset; 626 iph = (struct iphdr *)ipv6h; 627 628 /* 629 * After stripping the outer encap, the packet still carries a 630 * tunnel encapsulation: the nested one. 631 */ 632 skb->encapsulation = 1; 633 634 /* GSO expect a valid transpor header, move it to the current one. */ 635 skb_set_transport_header(skb, gro_hint->nested_tp_offset); 636 637 /* Adjust the nested IP{6} hdr to actual GSO len. */ 638 if (gro_hint->nested_is_v6) { 639 ipv6h->payload_len = htons(total_len - sizeof(*ipv6h)); 640 } else { 641 __be16 old_len = iph->tot_len; 642 643 iph->tot_len = htons(total_len); 644 645 /* For IPv4 additionally adjust the nested csum. */ 646 csum_replace2(&iph->check, old_len, iph->tot_len); 647 ip_send_check(iph); 648 } 649 650 /* Adjust the nested UDP header len and checksum. */ 651 uh = udp_hdr(skb); 652 uh->len = htons(skb->len - gro_hint->nested_tp_offset); 653 if (uh->check) { 654 len = skb->len - gro_hint->nested_tp_offset; 655 skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL_CSUM; 656 if (gro_hint->nested_is_v6) 657 uh->check = ~udp_v6_check(len, &ipv6h->saddr, 658 &ipv6h->daddr, 0); 659 else 660 uh->check = ~udp_v4_check(len, iph->saddr, 661 iph->daddr, 0); 662 } else { 663 skb_shinfo(skb)->gso_type |= SKB_GSO_UDP_TUNNEL; 664 } 665 return 0; 666 } 667 668 /* Callback from net/ipv4/udp.c to receive packets */ 669 static int geneve_udp_encap_recv(struct sock *sk, struct sk_buff *skb) 670 { 671 struct genevehdr *geneveh; 672 struct geneve_dev *geneve; 673 struct geneve_sock *gs; 674 __be16 inner_proto; 675 int opts_len; 676 677 /* Need UDP and Geneve header to be present */ 678 if (unlikely(!pskb_may_pull(skb, GENEVE_BASE_HLEN))) 679 goto drop; 680 681 /* Return packets with reserved bits set */ 682 geneveh = geneve_hdr(skb); 683 if (unlikely(geneveh->ver != GENEVE_VER)) 684 goto drop; 685 686 gs = rcu_dereference_sk_user_data(sk); 687 if (!gs) 688 goto drop; 689 690 geneve = geneve_lookup_skb(gs, skb); 691 if (!geneve) 692 goto drop; 693 694 inner_proto = geneveh->proto_type; 695 696 if (unlikely((!geneve->cfg.inner_proto_inherit && 697 inner_proto != htons(ETH_P_TEB)))) { 698 dev_dstats_rx_dropped(geneve->dev); 699 goto drop; 700 } 701 702 opts_len = geneveh->opt_len * 4; 703 if (iptunnel_pull_header(skb, GENEVE_BASE_HLEN + opts_len, inner_proto, 704 !net_eq(geneve->net, dev_net(geneve->dev)))) { 705 dev_dstats_rx_dropped(geneve->dev); 706 goto drop; 707 } 708 709 /* 710 * After hint processing, the transport header points to the inner one 711 * and we can't use anymore on geneve_hdr(). 712 */ 713 geneveh = geneve_hdr(skb); 714 if (geneve_post_decap_hint(sk, skb, sizeof(struct genevehdr) + 715 opts_len, &geneveh)) { 716 DEV_STATS_INC(geneve->dev, rx_errors); 717 goto drop; 718 } 719 720 geneve_rx(geneve, gs, skb, geneveh); 721 return 0; 722 723 drop: 724 /* Consume bad packet */ 725 kfree_skb(skb); 726 return 0; 727 } 728 729 /* Callback from net/ipv{4,6}/udp.c to check that we have a tunnel for errors */ 730 static int geneve_udp_encap_err_lookup(struct sock *sk, struct sk_buff *skb) 731 { 732 struct genevehdr *geneveh; 733 struct geneve_sock *gs; 734 u8 zero_vni[3] = { 0 }; 735 u8 *vni = zero_vni; 736 737 if (!pskb_may_pull(skb, skb_transport_offset(skb) + GENEVE_BASE_HLEN)) 738 return -EINVAL; 739 740 geneveh = geneve_hdr(skb); 741 if (geneveh->ver != GENEVE_VER) 742 return -EINVAL; 743 744 if (geneveh->proto_type != htons(ETH_P_TEB)) 745 return -EINVAL; 746 747 gs = rcu_dereference_sk_user_data(sk); 748 if (!gs) 749 return -ENOENT; 750 751 if (geneve_get_sk_family(gs) == AF_INET) { 752 struct iphdr *iph = ip_hdr(skb); 753 __be32 addr4 = 0; 754 755 if (!gs->collect_md) { 756 vni = geneve_hdr(skb)->vni; 757 addr4 = iph->daddr; 758 } 759 760 return geneve_lookup(gs, addr4, vni) ? 0 : -ENOENT; 761 } 762 763 #if IS_ENABLED(CONFIG_IPV6) 764 if (geneve_get_sk_family(gs) == AF_INET6) { 765 struct ipv6hdr *ip6h = ipv6_hdr(skb); 766 struct in6_addr addr6; 767 768 memset(&addr6, 0, sizeof(struct in6_addr)); 769 770 if (!gs->collect_md) { 771 vni = geneve_hdr(skb)->vni; 772 addr6 = ip6h->daddr; 773 } 774 775 return geneve6_lookup(gs, addr6, vni) ? 0 : -ENOENT; 776 } 777 #endif 778 779 return -EPFNOSUPPORT; 780 } 781 782 static struct sock *geneve_create_sock(struct net *net, 783 struct geneve_dev *geneve, bool ipv6) 784 { 785 struct ip_tunnel_info *info = &geneve->cfg.info; 786 struct udp_port_cfg udp_conf; 787 struct socket *sock; 788 int err; 789 790 memset(&udp_conf, 0, sizeof(udp_conf)); 791 792 #if IS_ENABLED(CONFIG_IPV6) 793 if (ipv6) { 794 udp_conf.family = AF_INET6; 795 udp_conf.ipv6_v6only = 1; 796 udp_conf.use_udp6_rx_checksums = geneve->cfg.use_udp6_rx_checksums; 797 udp_conf.local_ip6 = info->key.u.ipv6.src; 798 } else 799 #endif 800 { 801 udp_conf.family = AF_INET; 802 udp_conf.local_ip.s_addr = info->key.u.ipv4.src; 803 } 804 805 udp_conf.local_udp_port = info->key.tp_dst; 806 807 /* Open UDP socket */ 808 err = udp_sock_create(net, &udp_conf, &sock); 809 if (err < 0) 810 return ERR_PTR(err); 811 812 udp_allow_gso(sock->sk); 813 return sock->sk; 814 } 815 816 static bool geneve_hdr_match(struct sk_buff *skb, 817 const struct genevehdr *gh, 818 const struct genevehdr *gh2, 819 unsigned int hint_off) 820 { 821 const struct geneve_opt_gro_hint *gro_hint; 822 void *nested, *nested2, *nh, *nh2; 823 struct udphdr *udp, *udp2; 824 unsigned int gh_len; 825 826 /* Match the geneve hdr and options */ 827 if (gh->opt_len != gh2->opt_len) 828 return false; 829 830 gh_len = geneve_hlen(gh); 831 if (memcmp(gh, gh2, gh_len)) 832 return false; 833 834 if (!hint_off) 835 return true; 836 837 /* 838 * When gro is present consider the nested headers as part 839 * of the geneve options 840 */ 841 nested = (void *)gh + gh_len; 842 nested2 = (void *)gh2 + gh_len; 843 gro_hint = geneve_opt_gro_hint(gh, hint_off); 844 if (!memcmp(nested, nested2, gro_hint->nested_hdr_len)) 845 return true; 846 847 /* 848 * The nested headers differ; the packets can still belong to 849 * the same flow when IPs/proto/ports match; if so flushing is 850 * required. 851 */ 852 nh = nested + gro_hint->nested_nh_offset; 853 nh2 = nested2 + gro_hint->nested_nh_offset; 854 if (gro_hint->nested_is_v6) { 855 struct ipv6hdr *iph = nh, *iph2 = nh2; 856 unsigned int nested_nlen; 857 __be32 first_word; 858 859 first_word = *(__be32 *)iph ^ *(__be32 *)iph2; 860 if ((first_word & htonl(0xF00FFFFF)) || 861 !ipv6_addr_equal(&iph->saddr, &iph2->saddr) || 862 !ipv6_addr_equal(&iph->daddr, &iph2->daddr) || 863 iph->nexthdr != iph2->nexthdr) 864 return false; 865 866 nested_nlen = gro_hint->nested_tp_offset - 867 gro_hint->nested_nh_offset; 868 if (nested_nlen > sizeof(struct ipv6hdr) && 869 (memcmp(iph + 1, iph2 + 1, 870 nested_nlen - sizeof(struct ipv6hdr)))) 871 return false; 872 } else { 873 struct iphdr *iph = nh, *iph2 = nh2; 874 875 if ((iph->protocol ^ iph2->protocol) | 876 ((__force u32)iph->saddr ^ (__force u32)iph2->saddr) | 877 ((__force u32)iph->daddr ^ (__force u32)iph2->daddr)) 878 return false; 879 } 880 881 udp = nested + gro_hint->nested_tp_offset; 882 udp2 = nested2 + gro_hint->nested_tp_offset; 883 if (udp->source != udp2->source || udp->dest != udp2->dest || 884 udp->check != udp2->check) 885 return false; 886 887 NAPI_GRO_CB(skb)->flush = 1; 888 return true; 889 } 890 891 static struct sk_buff *geneve_gro_receive(struct sock *sk, 892 struct list_head *head, 893 struct sk_buff *skb) 894 { 895 unsigned int hlen, gh_len, off_gnv, hint_off; 896 const struct geneve_opt_gro_hint *gro_hint; 897 const struct packet_offload *ptype; 898 struct genevehdr *gh, *gh2; 899 struct sk_buff *pp = NULL; 900 struct sk_buff *p; 901 int flush = 1; 902 __be16 type; 903 904 off_gnv = skb_gro_offset(skb); 905 hlen = off_gnv + sizeof(*gh); 906 gh = skb_gro_header(skb, hlen, off_gnv); 907 if (unlikely(!gh)) 908 goto out; 909 910 if (gh->ver != GENEVE_VER || gh->oam) 911 goto out; 912 gh_len = geneve_hlen(gh); 913 type = gh->proto_type; 914 915 hlen = off_gnv + gh_len; 916 if (!skb_gro_may_pull(skb, hlen)) { 917 gh = skb_gro_header_slow(skb, hlen, off_gnv); 918 if (unlikely(!gh)) 919 goto out; 920 } 921 922 /* The GRO hint/nested hdr could use a different ethernet type. */ 923 hint_off = geneve_sk_gro_hint_off(sk, gh, &type, &gh_len); 924 if (hint_off) { 925 926 /* 927 * If the hint is present, and nested hdr validation fails, do 928 * not attempt plain GRO: it will ignore inner hdrs and cause 929 * OoO. 930 */ 931 gh = skb_gro_header(skb, off_gnv + gh_len, off_gnv); 932 if (unlikely(!gh)) 933 goto out; 934 935 gro_hint = geneve_opt_gro_hint(gh, hint_off); 936 if (!geneve_opt_gro_hint_validate_csum(skb, gh, gro_hint)) 937 goto out; 938 } 939 940 list_for_each_entry(p, head, list) { 941 if (!NAPI_GRO_CB(p)->same_flow) 942 continue; 943 944 gh2 = (struct genevehdr *)(p->data + off_gnv); 945 if (!geneve_hdr_match(skb, gh, gh2, hint_off)) { 946 NAPI_GRO_CB(p)->same_flow = 0; 947 continue; 948 } 949 } 950 951 skb_gro_pull(skb, gh_len); 952 skb_gro_postpull_rcsum(skb, gh, gh_len); 953 if (likely(type == htons(ETH_P_TEB))) 954 return call_gro_receive(eth_gro_receive, head, skb); 955 956 ptype = gro_find_receive_by_type(type); 957 if (!ptype) 958 goto out; 959 960 pp = call_gro_receive(ptype->callbacks.gro_receive, head, skb); 961 flush = 0; 962 963 out: 964 skb_gro_flush_final(skb, pp, flush); 965 966 return pp; 967 } 968 969 static int geneve_gro_complete(struct sock *sk, struct sk_buff *skb, 970 int nhoff) 971 { 972 struct genevehdr *gh; 973 struct packet_offload *ptype; 974 __be16 type; 975 unsigned int gh_len; 976 int err = -ENOSYS; 977 978 gh = (struct genevehdr *)(skb->data + nhoff); 979 gh_len = geneve_hlen(gh); 980 type = gh->proto_type; 981 geneve_sk_gro_hint_off(sk, gh, &type, &gh_len); 982 983 /* Bail out if we are about to dispatch past the inner network header 984 * gro_receive() validated. An inner VLAN tag only pushes 985 * inner_network_offset out, so use a lower bound. 986 */ 987 if (skb->encapsulation) { 988 unsigned int inner_nh = nhoff + gh_len; 989 990 if (type == htons(ETH_P_TEB)) 991 inner_nh += ETH_HLEN; 992 993 if (unlikely(inner_nh > NAPI_GRO_CB(skb)->inner_network_offset)) 994 return -EINVAL; 995 } 996 997 /* since skb->encapsulation is set, eth_gro_complete() sets the inner mac header */ 998 if (likely(type == htons(ETH_P_TEB))) 999 return eth_gro_complete(skb, nhoff + gh_len); 1000 1001 ptype = gro_find_complete_by_type(type); 1002 if (ptype) 1003 err = ptype->callbacks.gro_complete(skb, nhoff + gh_len); 1004 1005 skb_set_inner_mac_header(skb, nhoff + gh_len); 1006 1007 return err; 1008 } 1009 1010 /* Create new listen socket if needed */ 1011 static struct geneve_sock *geneve_socket_create(struct net *net, 1012 struct geneve_dev *geneve, bool ipv6) 1013 { 1014 struct geneve_net *gn = net_generic(net, geneve_net_id); 1015 struct udp_tunnel_sock_cfg tunnel_cfg; 1016 struct geneve_sock *gs; 1017 struct sock *sk; 1018 int h; 1019 1020 gs = kzalloc_obj(*gs); 1021 if (!gs) 1022 return ERR_PTR(-ENOMEM); 1023 1024 sk = geneve_create_sock(net, geneve, ipv6); 1025 if (IS_ERR(sk)) { 1026 kfree(gs); 1027 return ERR_CAST(sk); 1028 } 1029 1030 gs->sk = sk; 1031 gs->refcnt = 1; 1032 for (h = 0; h < VNI_HASH_SIZE; ++h) 1033 INIT_HLIST_HEAD(&gs->vni_list[h]); 1034 1035 /* Initialize the geneve udp offloads structure */ 1036 udp_tunnel_notify_add_rx_port(sk, UDP_TUNNEL_TYPE_GENEVE); 1037 1038 /* Mark socket as an encapsulation socket */ 1039 memset(&tunnel_cfg, 0, sizeof(tunnel_cfg)); 1040 tunnel_cfg.sk_user_data = gs; 1041 tunnel_cfg.encap_type = 1; 1042 tunnel_cfg.gro_receive = geneve_gro_receive; 1043 tunnel_cfg.gro_complete = geneve_gro_complete; 1044 tunnel_cfg.encap_rcv = geneve_udp_encap_recv; 1045 tunnel_cfg.encap_err_lookup = geneve_udp_encap_err_lookup; 1046 tunnel_cfg.encap_destroy = NULL; 1047 setup_udp_tunnel_sock(net, sk, &tunnel_cfg); 1048 list_add(&gs->list, &gn->sock_list); 1049 return gs; 1050 } 1051 1052 static void __geneve_sock_release(struct geneve_sock *gs) 1053 { 1054 if (!gs || --gs->refcnt) 1055 return; 1056 1057 list_del(&gs->list); 1058 udp_tunnel_notify_del_rx_port(gs->sk, UDP_TUNNEL_TYPE_GENEVE); 1059 udp_tunnel_sock_release(gs->sk); 1060 kfree_rcu(gs, rcu); 1061 } 1062 1063 static void geneve_sock_release(struct geneve_dev *geneve) 1064 { 1065 struct geneve_sock *gs4 = rtnl_dereference(geneve->sock4); 1066 #if IS_ENABLED(CONFIG_IPV6) 1067 struct geneve_sock *gs6 = rtnl_dereference(geneve->sock6); 1068 1069 rcu_assign_pointer(geneve->sock6, NULL); 1070 #endif 1071 1072 rcu_assign_pointer(geneve->sock4, NULL); 1073 1074 __geneve_sock_release(gs4); 1075 #if IS_ENABLED(CONFIG_IPV6) 1076 __geneve_sock_release(gs6); 1077 #endif 1078 } 1079 1080 static struct geneve_sock *geneve_find_sock(struct net *net, 1081 struct geneve_dev *geneve, bool ipv6) 1082 { 1083 struct geneve_net *gn = net_generic(net, geneve_net_id); 1084 struct ip_tunnel_info *info = &geneve->cfg.info; 1085 sa_family_t family = ipv6 ? AF_INET6 : AF_INET; 1086 bool gro_hint = geneve->cfg.gro_hint; 1087 __be16 dst_port = info->key.tp_dst; 1088 struct geneve_sock *gs; 1089 1090 list_for_each_entry(gs, &gn->sock_list, list) { 1091 if (inet_sk(gs->sk)->inet_sport != dst_port) 1092 continue; 1093 1094 if (geneve_get_sk_family(gs) != family) 1095 continue; 1096 1097 if (gs->gro_hint != gro_hint) 1098 continue; 1099 1100 if (family == AF_INET && 1101 inet_sk(gs->sk)->inet_saddr != info->key.u.ipv4.src) 1102 continue; 1103 1104 #if IS_ENABLED(CONFIG_IPV6) 1105 if (family == AF_INET6 && 1106 !ipv6_addr_equal(&gs->sk->sk_v6_rcv_saddr, &info->key.u.ipv6.src)) 1107 continue; 1108 #endif 1109 1110 return gs; 1111 } 1112 1113 return NULL; 1114 } 1115 1116 static int geneve_sock_add(struct geneve_dev *geneve, bool ipv6) 1117 { 1118 struct net *net = geneve->net; 1119 struct geneve_dev_node *node; 1120 struct geneve_sock *gs; 1121 __u8 vni[3]; 1122 __u32 hash; 1123 1124 gs = geneve_find_sock(net, geneve, ipv6); 1125 if (gs) { 1126 gs->refcnt++; 1127 goto out; 1128 } 1129 1130 gs = geneve_socket_create(net, geneve, ipv6); 1131 if (IS_ERR(gs)) 1132 return PTR_ERR(gs); 1133 1134 out: 1135 gs->collect_md = geneve->cfg.collect_md; 1136 gs->gro_hint = geneve->cfg.gro_hint; 1137 #if IS_ENABLED(CONFIG_IPV6) 1138 if (ipv6) { 1139 rcu_assign_pointer(geneve->sock6, gs); 1140 node = &geneve->hlist6; 1141 } else 1142 #endif 1143 { 1144 rcu_assign_pointer(geneve->sock4, gs); 1145 node = &geneve->hlist4; 1146 } 1147 node->geneve = geneve; 1148 1149 tunnel_id_to_vni(geneve->cfg.info.key.tun_id, vni); 1150 hash = geneve_net_vni_hash(vni); 1151 hlist_add_head_rcu(&node->hlist, &gs->vni_list[hash]); 1152 return 0; 1153 } 1154 1155 static int geneve_open(struct net_device *dev) 1156 { 1157 struct geneve_dev *geneve = netdev_priv(dev); 1158 bool dualstack = geneve->cfg.dualstack; 1159 bool ipv4, ipv6; 1160 int ret = 0; 1161 1162 ipv6 = geneve->cfg.info.mode & IP_TUNNEL_INFO_IPV6 || dualstack; 1163 ipv4 = !ipv6 || dualstack; 1164 #if IS_ENABLED(CONFIG_IPV6) 1165 if (ipv6) { 1166 ret = geneve_sock_add(geneve, true); 1167 if (ret < 0 && ret != -EAFNOSUPPORT) 1168 ipv4 = false; 1169 } 1170 #endif 1171 if (ipv4) 1172 ret = geneve_sock_add(geneve, false); 1173 if (ret < 0) 1174 geneve_sock_release(geneve); 1175 1176 return ret; 1177 } 1178 1179 static int geneve_stop(struct net_device *dev) 1180 { 1181 struct geneve_dev *geneve = netdev_priv(dev); 1182 1183 hlist_del_init_rcu(&geneve->hlist4.hlist); 1184 #if IS_ENABLED(CONFIG_IPV6) 1185 hlist_del_init_rcu(&geneve->hlist6.hlist); 1186 #endif 1187 geneve_sock_release(geneve); 1188 return 0; 1189 } 1190 1191 static void geneve_build_header(struct genevehdr *geneveh, 1192 const struct ip_tunnel_info *info, 1193 __be16 inner_proto) 1194 { 1195 geneveh->ver = GENEVE_VER; 1196 geneveh->opt_len = info->options_len / 4; 1197 geneveh->oam = test_bit(IP_TUNNEL_OAM_BIT, info->key.tun_flags); 1198 geneveh->critical = test_bit(IP_TUNNEL_CRIT_OPT_BIT, 1199 info->key.tun_flags); 1200 geneveh->rsvd1 = 0; 1201 tunnel_id_to_vni(info->key.tun_id, geneveh->vni); 1202 geneveh->proto_type = inner_proto; 1203 geneveh->rsvd2 = 0; 1204 1205 if (test_bit(IP_TUNNEL_GENEVE_OPT_BIT, info->key.tun_flags)) 1206 ip_tunnel_info_opts_get(geneveh->options, info); 1207 } 1208 1209 static int geneve_build_gro_hint_opt(const struct geneve_dev *geneve, 1210 struct sk_buff *skb) 1211 { 1212 struct geneve_skb_cb *cb = GENEVE_SKB_CB(skb); 1213 struct geneve_opt_gro_hint *hint; 1214 unsigned int nhlen; 1215 bool nested_is_v6; 1216 int id; 1217 1218 BUILD_BUG_ON(sizeof(skb->cb) < sizeof(struct geneve_skb_cb)); 1219 cb->gro_hint_len = 0; 1220 1221 /* Try to add the GRO hint only in case of double encap. */ 1222 if (!geneve->cfg.gro_hint || !skb->encapsulation) 1223 return 0; 1224 1225 /* 1226 * The nested headers must fit the geneve opt len fields and the 1227 * nested encap must carry a nested transport (UDP) header. 1228 */ 1229 nhlen = skb_inner_mac_header(skb) - skb->data; 1230 if (nhlen > 255 || !skb_transport_header_was_set(skb) || 1231 skb->inner_protocol_type != ENCAP_TYPE_ETHER || 1232 (skb_transport_offset(skb) + sizeof(struct udphdr) > nhlen)) 1233 return 0; 1234 1235 id = proto_to_id(skb->inner_protocol); 1236 if (id < 0) 1237 return 0; 1238 1239 nested_is_v6 = skb->protocol == htons(ETH_P_IPV6); 1240 if (nested_is_v6) { 1241 int start = skb_network_offset(skb) + sizeof(struct ipv6hdr); 1242 u8 proto = ipv6_hdr(skb)->nexthdr; 1243 __be16 foff; 1244 1245 if (ipv6_skip_exthdr(skb, start, &proto, &foff) < 0 || 1246 proto != IPPROTO_UDP) 1247 return 0; 1248 } else { 1249 if (ip_hdr(skb)->protocol != IPPROTO_UDP) 1250 return 0; 1251 } 1252 1253 hint = &cb->gro_hint; 1254 memset(hint, 0, sizeof(*hint)); 1255 hint->inner_proto_id = id; 1256 hint->nested_is_v6 = skb->protocol == htons(ETH_P_IPV6); 1257 hint->nested_nh_offset = skb_network_offset(skb); 1258 hint->nested_tp_offset = skb_transport_offset(skb); 1259 hint->nested_hdr_len = nhlen; 1260 cb->gro_hint_len = GENEVE_OPT_GRO_HINT_SIZE; 1261 return GENEVE_OPT_GRO_HINT_SIZE; 1262 } 1263 1264 static void geneve_put_gro_hint_opt(struct genevehdr *gnvh, int opt_size, 1265 const struct geneve_opt_gro_hint *hint) 1266 { 1267 struct geneve_opt *gro_opt; 1268 1269 /* geneve_build_header() did not took in account the GRO hint. */ 1270 gnvh->opt_len = (opt_size + GENEVE_OPT_GRO_HINT_SIZE) >> 2; 1271 1272 gro_opt = (void *)(gnvh + 1) + opt_size; 1273 memset(gro_opt, 0, sizeof(*gro_opt)); 1274 1275 gro_opt->opt_class = htons(GENEVE_OPT_NETDEV_CLASS); 1276 gro_opt->type = GENEVE_OPT_GRO_HINT_TYPE; 1277 gro_opt->length = GENEVE_OPT_GRO_HINT_LEN; 1278 memcpy(gro_opt + 1, hint, sizeof(*hint)); 1279 } 1280 1281 static int geneve_build_skb(struct dst_entry *dst, struct sk_buff *skb, 1282 const struct ip_tunnel_info *info, 1283 const struct geneve_dev *geneve, int ip_hdr_len) 1284 { 1285 bool udp_sum = test_bit(IP_TUNNEL_CSUM_BIT, info->key.tun_flags); 1286 bool inner_proto_inherit = geneve->cfg.inner_proto_inherit; 1287 bool xnet = !net_eq(geneve->net, dev_net(geneve->dev)); 1288 struct geneve_skb_cb *cb = GENEVE_SKB_CB(skb); 1289 struct genevehdr *gnvh; 1290 __be16 inner_proto; 1291 bool double_encap; 1292 int min_headroom; 1293 int opt_size; 1294 int err; 1295 1296 skb_reset_mac_header(skb); 1297 skb_scrub_packet(skb, xnet); 1298 1299 opt_size = info->options_len + cb->gro_hint_len; 1300 min_headroom = LL_RESERVED_SPACE(dst->dev) + dst->header_len + 1301 GENEVE_BASE_HLEN + opt_size + ip_hdr_len; 1302 err = skb_cow_head(skb, min_headroom); 1303 if (unlikely(err)) 1304 goto free_dst; 1305 1306 double_encap = udp_tunnel_handle_partial(skb); 1307 err = udp_tunnel_handle_offloads(skb, udp_sum); 1308 if (err) 1309 goto free_dst; 1310 1311 gnvh = __skb_push(skb, sizeof(*gnvh) + opt_size); 1312 inner_proto = inner_proto_inherit ? skb->protocol : htons(ETH_P_TEB); 1313 geneve_build_header(gnvh, info, inner_proto); 1314 1315 if (cb->gro_hint_len) 1316 geneve_put_gro_hint_opt(gnvh, info->options_len, &cb->gro_hint); 1317 1318 udp_tunnel_set_inner_protocol(skb, double_encap, inner_proto); 1319 return 0; 1320 1321 free_dst: 1322 dst_release(dst); 1323 return err; 1324 } 1325 1326 static u8 geneve_get_dsfield(struct sk_buff *skb, struct net_device *dev, 1327 const struct ip_tunnel_info *info, 1328 bool *use_cache) 1329 { 1330 struct geneve_dev *geneve = netdev_priv(dev); 1331 u8 dsfield; 1332 1333 dsfield = info->key.tos; 1334 if (dsfield == 1 && !geneve->cfg.collect_md) { 1335 dsfield = ip_tunnel_get_dsfield(ip_hdr(skb), skb); 1336 *use_cache = false; 1337 } 1338 1339 return dsfield; 1340 } 1341 1342 static int geneve_xmit_skb(struct sk_buff *skb, struct net_device *dev, 1343 struct geneve_dev *geneve, 1344 const struct ip_tunnel_info *info) 1345 { 1346 struct geneve_sock *gs4 = rcu_dereference(geneve->sock4); 1347 const struct ip_tunnel_key *key = &info->key; 1348 struct rtable *rt; 1349 bool use_cache; 1350 __u8 tos, ttl; 1351 __be16 df = 0; 1352 __be32 saddr; 1353 __be16 sport; 1354 int err; 1355 1356 if (skb_vlan_inet_prepare(skb, geneve->cfg.inner_proto_inherit)) 1357 return -EINVAL; 1358 1359 if (!gs4) 1360 return -EIO; 1361 1362 use_cache = ip_tunnel_dst_cache_usable(skb, info); 1363 tos = geneve_get_dsfield(skb, dev, info, &use_cache); 1364 sport = udp_flow_src_port(geneve->net, skb, 1365 geneve->cfg.port_min, 1366 geneve->cfg.port_max, true); 1367 1368 rt = udp_tunnel_dst_lookup(skb, dev, geneve->net, 0, &saddr, 1369 &info->key, 1370 sport, geneve->cfg.info.key.tp_dst, tos, 1371 use_cache ? 1372 (struct dst_cache *)&info->dst_cache : NULL); 1373 if (IS_ERR(rt)) 1374 return PTR_ERR(rt); 1375 1376 if (geneve->cfg.info.key.u.ipv4.src && 1377 saddr != geneve->cfg.info.key.u.ipv4.src) { 1378 dst_release(&rt->dst); 1379 return -EADDRNOTAVAIL; 1380 } 1381 1382 err = skb_tunnel_check_pmtu(skb, &rt->dst, 1383 GENEVE_IPV4_HLEN + info->options_len + 1384 geneve_build_gro_hint_opt(geneve, skb), 1385 netif_is_any_bridge_port(dev)); 1386 if (err < 0) { 1387 dst_release(&rt->dst); 1388 return err; 1389 } else if (err) { 1390 struct ip_tunnel_info *info; 1391 1392 info = skb_tunnel_info(skb); 1393 if (info) { 1394 struct ip_tunnel_info *unclone; 1395 1396 unclone = skb_tunnel_info_unclone(skb); 1397 if (unlikely(!unclone)) { 1398 dst_release(&rt->dst); 1399 return -ENOMEM; 1400 } 1401 1402 unclone->key.u.ipv4.dst = saddr; 1403 unclone->key.u.ipv4.src = info->key.u.ipv4.dst; 1404 } 1405 1406 if (!pskb_may_pull(skb, ETH_HLEN)) { 1407 dst_release(&rt->dst); 1408 return -EINVAL; 1409 } 1410 1411 skb->protocol = eth_type_trans(skb, geneve->dev); 1412 __netif_rx(skb); 1413 dst_release(&rt->dst); 1414 return -EMSGSIZE; 1415 } 1416 1417 tos = ip_tunnel_ecn_encap(tos, ip_hdr(skb), skb); 1418 if (geneve->cfg.collect_md) { 1419 ttl = key->ttl; 1420 1421 df = test_bit(IP_TUNNEL_DONT_FRAGMENT_BIT, key->tun_flags) ? 1422 htons(IP_DF) : 0; 1423 } else { 1424 if (geneve->cfg.ttl_inherit) 1425 ttl = ip_tunnel_get_ttl(ip_hdr(skb), skb); 1426 else 1427 ttl = key->ttl; 1428 ttl = ttl ? : ip4_dst_hoplimit(&rt->dst); 1429 1430 if (geneve->cfg.df == GENEVE_DF_SET) { 1431 df = htons(IP_DF); 1432 } else if (geneve->cfg.df == GENEVE_DF_INHERIT) { 1433 struct ethhdr *eth = skb_eth_hdr(skb); 1434 1435 if (ntohs(eth->h_proto) == ETH_P_IPV6) { 1436 df = htons(IP_DF); 1437 } else if (ntohs(eth->h_proto) == ETH_P_IP) { 1438 struct iphdr *iph = ip_hdr(skb); 1439 1440 if (iph->frag_off & htons(IP_DF)) 1441 df = htons(IP_DF); 1442 } 1443 } 1444 } 1445 1446 err = geneve_build_skb(&rt->dst, skb, info, geneve, 1447 sizeof(struct iphdr)); 1448 if (unlikely(err)) 1449 return err; 1450 1451 udp_tunnel_xmit_skb(rt, gs4->sk, skb, saddr, info->key.u.ipv4.dst, 1452 tos, ttl, df, sport, geneve->cfg.info.key.tp_dst, 1453 !net_eq(geneve->net, dev_net(geneve->dev)), 1454 !test_bit(IP_TUNNEL_CSUM_BIT, info->key.tun_flags), 1455 0); 1456 return 0; 1457 } 1458 1459 #if IS_ENABLED(CONFIG_IPV6) 1460 static int geneve6_xmit_skb(struct sk_buff *skb, struct net_device *dev, 1461 struct geneve_dev *geneve, 1462 const struct ip_tunnel_info *info) 1463 { 1464 struct geneve_sock *gs6 = rcu_dereference(geneve->sock6); 1465 const struct ip_tunnel_key *key = &info->key; 1466 struct dst_entry *dst = NULL; 1467 struct in6_addr saddr; 1468 bool use_cache; 1469 __u8 prio, ttl; 1470 __be16 sport; 1471 int err; 1472 1473 if (skb_vlan_inet_prepare(skb, geneve->cfg.inner_proto_inherit)) 1474 return -EINVAL; 1475 1476 if (!gs6) 1477 return -EIO; 1478 1479 use_cache = ip_tunnel_dst_cache_usable(skb, info); 1480 prio = geneve_get_dsfield(skb, dev, info, &use_cache); 1481 sport = udp_flow_src_port(geneve->net, skb, 1482 geneve->cfg.port_min, 1483 geneve->cfg.port_max, true); 1484 1485 dst = udp_tunnel6_dst_lookup(skb, dev, geneve->net, gs6->sk, 0, 1486 &saddr, key, sport, 1487 geneve->cfg.info.key.tp_dst, prio, 1488 use_cache ? 1489 (struct dst_cache *)&info->dst_cache : NULL); 1490 if (IS_ERR(dst)) 1491 return PTR_ERR(dst); 1492 1493 if (!ipv6_addr_any(&geneve->cfg.info.key.u.ipv6.src) && 1494 !ipv6_addr_equal(&saddr, &geneve->cfg.info.key.u.ipv6.src)) { 1495 dst_release(dst); 1496 return -EADDRNOTAVAIL; 1497 } 1498 1499 err = skb_tunnel_check_pmtu(skb, dst, 1500 GENEVE_IPV6_HLEN + info->options_len + 1501 geneve_build_gro_hint_opt(geneve, skb), 1502 netif_is_any_bridge_port(dev)); 1503 if (err < 0) { 1504 dst_release(dst); 1505 return err; 1506 } else if (err) { 1507 struct ip_tunnel_info *info = skb_tunnel_info(skb); 1508 1509 if (info) { 1510 struct ip_tunnel_info *unclone; 1511 1512 unclone = skb_tunnel_info_unclone(skb); 1513 if (unlikely(!unclone)) { 1514 dst_release(dst); 1515 return -ENOMEM; 1516 } 1517 1518 unclone->key.u.ipv6.dst = saddr; 1519 unclone->key.u.ipv6.src = info->key.u.ipv6.dst; 1520 } 1521 1522 if (!pskb_may_pull(skb, ETH_HLEN)) { 1523 dst_release(dst); 1524 return -EINVAL; 1525 } 1526 1527 skb->protocol = eth_type_trans(skb, geneve->dev); 1528 __netif_rx(skb); 1529 dst_release(dst); 1530 return -EMSGSIZE; 1531 } 1532 1533 prio = ip_tunnel_ecn_encap(prio, ip_hdr(skb), skb); 1534 if (geneve->cfg.collect_md) { 1535 ttl = key->ttl; 1536 } else { 1537 if (geneve->cfg.ttl_inherit) 1538 ttl = ip_tunnel_get_ttl(ip_hdr(skb), skb); 1539 else 1540 ttl = key->ttl; 1541 ttl = ttl ? : ip6_dst_hoplimit(dst); 1542 } 1543 err = geneve_build_skb(dst, skb, info, geneve, sizeof(struct ipv6hdr)); 1544 if (unlikely(err)) 1545 return err; 1546 1547 udp_tunnel6_xmit_skb(dst, gs6->sk, skb, dev, 1548 &saddr, &key->u.ipv6.dst, prio, ttl, 1549 info->key.label, sport, geneve->cfg.info.key.tp_dst, 1550 !test_bit(IP_TUNNEL_CSUM_BIT, 1551 info->key.tun_flags), 1552 0); 1553 return 0; 1554 } 1555 #endif 1556 1557 static netdev_tx_t geneve_xmit(struct sk_buff *skb, struct net_device *dev) 1558 { 1559 struct geneve_dev *geneve = netdev_priv(dev); 1560 struct ip_tunnel_info *info = NULL; 1561 int err; 1562 1563 if (geneve->cfg.collect_md) { 1564 info = skb_tunnel_info(skb); 1565 if (unlikely(!info || !(info->mode & IP_TUNNEL_INFO_TX))) { 1566 netdev_dbg(dev, "no tunnel metadata\n"); 1567 dev_kfree_skb(skb); 1568 dev_dstats_tx_dropped(dev); 1569 return NETDEV_TX_OK; 1570 } 1571 } else { 1572 info = &geneve->cfg.info; 1573 } 1574 1575 rcu_read_lock(); 1576 #if IS_ENABLED(CONFIG_IPV6) 1577 if (info->mode & IP_TUNNEL_INFO_IPV6) 1578 err = geneve6_xmit_skb(skb, dev, geneve, info); 1579 else 1580 #endif 1581 err = geneve_xmit_skb(skb, dev, geneve, info); 1582 rcu_read_unlock(); 1583 1584 if (likely(!err)) 1585 return NETDEV_TX_OK; 1586 1587 if (err != -EMSGSIZE) 1588 dev_kfree_skb(skb); 1589 1590 if (err == -ELOOP) 1591 DEV_STATS_INC(dev, collisions); 1592 else if (err == -ENETUNREACH) 1593 DEV_STATS_INC(dev, tx_carrier_errors); 1594 1595 DEV_STATS_INC(dev, tx_errors); 1596 return NETDEV_TX_OK; 1597 } 1598 1599 static int geneve_change_mtu(struct net_device *dev, int new_mtu) 1600 { 1601 if (new_mtu > dev->max_mtu) 1602 new_mtu = dev->max_mtu; 1603 else if (new_mtu < dev->min_mtu) 1604 new_mtu = dev->min_mtu; 1605 1606 WRITE_ONCE(dev->mtu, new_mtu); 1607 return 0; 1608 } 1609 1610 static int geneve_fill_metadata_dst(struct net_device *dev, struct sk_buff *skb) 1611 { 1612 struct ip_tunnel_info *info = skb_tunnel_info(skb); 1613 struct geneve_dev *geneve = netdev_priv(dev); 1614 __be16 sport; 1615 1616 if (ip_tunnel_info_af(info) == AF_INET) { 1617 struct rtable *rt; 1618 struct geneve_sock *gs4 = rcu_dereference(geneve->sock4); 1619 bool use_cache; 1620 __be32 saddr; 1621 u8 tos; 1622 1623 if (!gs4) 1624 return -EIO; 1625 1626 use_cache = ip_tunnel_dst_cache_usable(skb, info); 1627 tos = geneve_get_dsfield(skb, dev, info, &use_cache); 1628 sport = udp_flow_src_port(geneve->net, skb, 1629 geneve->cfg.port_min, 1630 geneve->cfg.port_max, true); 1631 1632 rt = udp_tunnel_dst_lookup(skb, dev, geneve->net, 0, &saddr, 1633 &info->key, 1634 sport, geneve->cfg.info.key.tp_dst, 1635 tos, 1636 use_cache ? &info->dst_cache : NULL); 1637 if (IS_ERR(rt)) 1638 return PTR_ERR(rt); 1639 1640 ip_rt_put(rt); 1641 info->key.u.ipv4.src = saddr; 1642 #if IS_ENABLED(CONFIG_IPV6) 1643 } else if (ip_tunnel_info_af(info) == AF_INET6) { 1644 struct dst_entry *dst; 1645 struct geneve_sock *gs6 = rcu_dereference(geneve->sock6); 1646 struct in6_addr saddr; 1647 bool use_cache; 1648 u8 prio; 1649 1650 if (!gs6) 1651 return -EIO; 1652 1653 use_cache = ip_tunnel_dst_cache_usable(skb, info); 1654 prio = geneve_get_dsfield(skb, dev, info, &use_cache); 1655 sport = udp_flow_src_port(geneve->net, skb, 1656 geneve->cfg.port_min, 1657 geneve->cfg.port_max, true); 1658 1659 dst = udp_tunnel6_dst_lookup(skb, dev, geneve->net, gs6->sk, 0, 1660 &saddr, &info->key, sport, 1661 geneve->cfg.info.key.tp_dst, prio, 1662 use_cache ? &info->dst_cache : NULL); 1663 if (IS_ERR(dst)) 1664 return PTR_ERR(dst); 1665 1666 dst_release(dst); 1667 info->key.u.ipv6.src = saddr; 1668 #endif 1669 } else { 1670 return -EINVAL; 1671 } 1672 1673 info->key.tp_src = sport; 1674 info->key.tp_dst = geneve->cfg.info.key.tp_dst; 1675 return 0; 1676 } 1677 1678 static const struct net_device_ops geneve_netdev_ops = { 1679 .ndo_init = geneve_init, 1680 .ndo_uninit = geneve_uninit, 1681 .ndo_open = geneve_open, 1682 .ndo_stop = geneve_stop, 1683 .ndo_start_xmit = geneve_xmit, 1684 .ndo_change_mtu = geneve_change_mtu, 1685 .ndo_validate_addr = eth_validate_addr, 1686 .ndo_set_mac_address = eth_mac_addr, 1687 .ndo_fill_metadata_dst = geneve_fill_metadata_dst, 1688 }; 1689 1690 static void geneve_get_drvinfo(struct net_device *dev, 1691 struct ethtool_drvinfo *drvinfo) 1692 { 1693 strscpy(drvinfo->version, GENEVE_NETDEV_VER, sizeof(drvinfo->version)); 1694 strscpy(drvinfo->driver, "geneve", sizeof(drvinfo->driver)); 1695 } 1696 1697 static const struct ethtool_ops geneve_ethtool_ops = { 1698 .get_drvinfo = geneve_get_drvinfo, 1699 .get_link = ethtool_op_get_link, 1700 }; 1701 1702 /* Info for udev, that this is a virtual tunnel endpoint */ 1703 static const struct device_type geneve_type = { 1704 .name = "geneve", 1705 }; 1706 1707 /* Calls the ndo_udp_tunnel_add of the caller in order to 1708 * supply the listening GENEVE udp ports. Callers are expected 1709 * to implement the ndo_udp_tunnel_add. 1710 */ 1711 static void geneve_offload_rx_ports(struct net_device *dev, bool push) 1712 { 1713 struct net *net = dev_net(dev); 1714 struct geneve_net *gn = net_generic(net, geneve_net_id); 1715 struct geneve_sock *gs; 1716 1717 ASSERT_RTNL(); 1718 1719 list_for_each_entry(gs, &gn->sock_list, list) { 1720 if (push) { 1721 udp_tunnel_push_rx_port(dev, gs->sk, 1722 UDP_TUNNEL_TYPE_GENEVE); 1723 } else { 1724 udp_tunnel_drop_rx_port(dev, gs->sk, 1725 UDP_TUNNEL_TYPE_GENEVE); 1726 } 1727 } 1728 } 1729 1730 /* Initialize the device structure. */ 1731 static void geneve_setup(struct net_device *dev) 1732 { 1733 ether_setup(dev); 1734 1735 dev->netdev_ops = &geneve_netdev_ops; 1736 dev->ethtool_ops = &geneve_ethtool_ops; 1737 dev->needs_free_netdev = true; 1738 1739 SET_NETDEV_DEVTYPE(dev, &geneve_type); 1740 1741 dev->features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_FRAGLIST; 1742 dev->features |= NETIF_F_RXCSUM; 1743 dev->features |= NETIF_F_GSO_SOFTWARE; 1744 1745 /* Partial features are disabled by default. */ 1746 dev->hw_features |= NETIF_F_SG | NETIF_F_HW_CSUM | NETIF_F_FRAGLIST; 1747 dev->hw_features |= NETIF_F_RXCSUM; 1748 dev->hw_features |= NETIF_F_GSO_SOFTWARE; 1749 dev->hw_features |= UDP_TUNNEL_PARTIAL_FEATURES; 1750 dev->hw_features |= NETIF_F_GSO_PARTIAL; 1751 1752 dev->hw_enc_features = dev->hw_features; 1753 dev->gso_partial_features = UDP_TUNNEL_PARTIAL_FEATURES; 1754 dev->mangleid_features = NETIF_F_GSO_PARTIAL; 1755 1756 dev->pcpu_stat_type = NETDEV_PCPU_STAT_DSTATS; 1757 /* MTU range: 68 - (something less than 65535) */ 1758 dev->min_mtu = ETH_MIN_MTU; 1759 /* The max_mtu calculation does not take account of GENEVE 1760 * options, to avoid excluding potentially valid 1761 * configurations. This will be further reduced by IPvX hdr size. 1762 */ 1763 dev->max_mtu = IP_MAX_MTU - GENEVE_BASE_HLEN - dev->hard_header_len; 1764 1765 netif_keep_dst(dev); 1766 dev->priv_flags &= ~IFF_TX_SKB_SHARING; 1767 dev->priv_flags |= IFF_LIVE_ADDR_CHANGE | IFF_NO_QUEUE; 1768 dev->lltx = true; 1769 eth_hw_addr_random(dev); 1770 } 1771 1772 static const struct nla_policy geneve_policy[IFLA_GENEVE_MAX + 1] = { 1773 [IFLA_GENEVE_UNSPEC] = { .strict_start_type = IFLA_GENEVE_INNER_PROTO_INHERIT }, 1774 [IFLA_GENEVE_ID] = { .type = NLA_U32 }, 1775 [IFLA_GENEVE_REMOTE] = { .len = sizeof_field(struct iphdr, daddr) }, 1776 [IFLA_GENEVE_REMOTE6] = { .len = sizeof(struct in6_addr) }, 1777 [IFLA_GENEVE_TTL] = { .type = NLA_U8 }, 1778 [IFLA_GENEVE_TOS] = { .type = NLA_U8 }, 1779 [IFLA_GENEVE_LABEL] = { .type = NLA_U32 }, 1780 [IFLA_GENEVE_PORT] = { .type = NLA_U16 }, 1781 [IFLA_GENEVE_COLLECT_METADATA] = { .type = NLA_FLAG }, 1782 [IFLA_GENEVE_UDP_CSUM] = { .type = NLA_U8 }, 1783 [IFLA_GENEVE_UDP_ZERO_CSUM6_TX] = { .type = NLA_U8 }, 1784 [IFLA_GENEVE_UDP_ZERO_CSUM6_RX] = { .type = NLA_U8 }, 1785 [IFLA_GENEVE_TTL_INHERIT] = { .type = NLA_U8 }, 1786 [IFLA_GENEVE_DF] = { .type = NLA_U8 }, 1787 [IFLA_GENEVE_INNER_PROTO_INHERIT] = { .type = NLA_FLAG }, 1788 [IFLA_GENEVE_PORT_RANGE] = NLA_POLICY_EXACT_LEN(sizeof(struct ifla_geneve_port_range)), 1789 [IFLA_GENEVE_GRO_HINT] = { .type = NLA_FLAG }, 1790 [IFLA_GENEVE_LOCAL] = { .type = NLA_BE32 }, 1791 [IFLA_GENEVE_LOCAL6] = NLA_POLICY_EXACT_LEN(sizeof(struct in6_addr)), 1792 }; 1793 1794 static int geneve_validate(struct nlattr *tb[], struct nlattr *data[], 1795 struct netlink_ext_ack *extack) 1796 { 1797 if (tb[IFLA_ADDRESS]) { 1798 if (nla_len(tb[IFLA_ADDRESS]) != ETH_ALEN) { 1799 NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS], 1800 "Provided link layer address is not Ethernet"); 1801 return -EINVAL; 1802 } 1803 1804 if (!is_valid_ether_addr(nla_data(tb[IFLA_ADDRESS]))) { 1805 NL_SET_ERR_MSG_ATTR(extack, tb[IFLA_ADDRESS], 1806 "Provided Ethernet address is not unicast"); 1807 return -EADDRNOTAVAIL; 1808 } 1809 } 1810 1811 if (!data) { 1812 NL_SET_ERR_MSG(extack, 1813 "Not enough attributes provided to perform the operation"); 1814 return -EINVAL; 1815 } 1816 1817 if (data[IFLA_GENEVE_ID]) { 1818 __u32 vni = nla_get_u32(data[IFLA_GENEVE_ID]); 1819 1820 if (vni >= GENEVE_N_VID) { 1821 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_ID], 1822 "Geneve ID must be lower than 16777216"); 1823 return -ERANGE; 1824 } 1825 } 1826 1827 if (data[IFLA_GENEVE_DF]) { 1828 enum ifla_geneve_df df = nla_get_u8(data[IFLA_GENEVE_DF]); 1829 1830 if (df < 0 || df > GENEVE_DF_MAX) { 1831 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_DF], 1832 "Invalid DF attribute"); 1833 return -EINVAL; 1834 } 1835 } 1836 1837 if (data[IFLA_GENEVE_PORT_RANGE]) { 1838 const struct ifla_geneve_port_range *p; 1839 1840 p = nla_data(data[IFLA_GENEVE_PORT_RANGE]); 1841 if (ntohs(p->high) < ntohs(p->low)) { 1842 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_PORT_RANGE], 1843 "Invalid source port range"); 1844 return -EINVAL; 1845 } 1846 } 1847 1848 return 0; 1849 } 1850 1851 static bool geneve_saddr_wildcard(const struct ip_tunnel_info *info) 1852 { 1853 if (ip_tunnel_info_af(info) == AF_INET) { 1854 if (!info->key.u.ipv4.src) 1855 return true; 1856 #if IS_ENABLED(CONFIG_IPV6) 1857 } else { 1858 if (ipv6_addr_any(&info->key.u.ipv6.src)) 1859 return true; 1860 #endif 1861 } 1862 1863 return false; 1864 } 1865 1866 static bool geneve_saddr_conflict(const struct ip_tunnel_info *a, 1867 const struct ip_tunnel_info *b) 1868 { 1869 if (ip_tunnel_info_af(a) != ip_tunnel_info_af(b)) 1870 return false; 1871 1872 if (geneve_saddr_wildcard(a) || geneve_saddr_wildcard(b)) 1873 return true; 1874 1875 if (ip_tunnel_info_af(a) == AF_INET) { 1876 if (a->key.u.ipv4.src == b->key.u.ipv4.src) 1877 return true; 1878 #if IS_ENABLED(CONFIG_IPV6) 1879 } else { 1880 if (ipv6_addr_equal(&a->key.u.ipv6.src, &b->key.u.ipv6.src)) 1881 return true; 1882 #endif 1883 } 1884 1885 return false; 1886 } 1887 1888 static struct geneve_dev *geneve_find_dev(struct geneve_net *gn, 1889 const struct geneve_config *cfg, 1890 const struct ip_tunnel_info *info, 1891 bool *tun_on_same_port, 1892 bool *tun_collect_md) 1893 { 1894 struct geneve_dev *geneve, *t = NULL; 1895 1896 *tun_on_same_port = false; 1897 *tun_collect_md = false; 1898 list_for_each_entry(geneve, &gn->geneve_list, next) { 1899 if (info->key.tp_dst == geneve->cfg.info.key.tp_dst && 1900 (cfg->dualstack || geneve->cfg.dualstack || 1901 geneve_saddr_conflict(info, &geneve->cfg.info))) { 1902 *tun_collect_md |= geneve->cfg.collect_md; 1903 *tun_on_same_port = true; 1904 } 1905 if (info->key.tun_id == geneve->cfg.info.key.tun_id && 1906 info->key.tp_dst == geneve->cfg.info.key.tp_dst && 1907 !memcmp(&info->key.u, &geneve->cfg.info.key.u, sizeof(info->key.u))) 1908 t = geneve; 1909 } 1910 return t; 1911 } 1912 1913 static bool is_tnl_info_zero(const struct ip_tunnel_info *info) 1914 { 1915 return !(info->key.tun_id || info->key.tos || 1916 !ip_tunnel_flags_empty(info->key.tun_flags) || 1917 info->key.ttl || info->key.label || info->key.tp_src || 1918 #if IS_ENABLED(CONFIG_IPV6) 1919 (ip_tunnel_info_af(info) == AF_INET6 && 1920 !ipv6_addr_any(&info->key.u.ipv6.dst)) || 1921 #endif 1922 (ip_tunnel_info_af(info) == AF_INET && 1923 info->key.u.ipv4.dst)); 1924 } 1925 1926 static bool geneve_dst_addr_equal(struct ip_tunnel_info *a, 1927 struct ip_tunnel_info *b) 1928 { 1929 if (ip_tunnel_info_af(a) == AF_INET) 1930 return a->key.u.ipv4.dst == b->key.u.ipv4.dst; 1931 else 1932 return ipv6_addr_equal(&a->key.u.ipv6.dst, &b->key.u.ipv6.dst); 1933 } 1934 1935 static int geneve_configure(struct net *net, struct net_device *dev, 1936 struct netlink_ext_ack *extack, 1937 const struct geneve_config *cfg) 1938 { 1939 struct geneve_net *gn = net_generic(net, geneve_net_id); 1940 struct geneve_dev *t, *geneve = netdev_priv(dev); 1941 const struct ip_tunnel_info *info = &cfg->info; 1942 bool tun_collect_md, tun_on_same_port; 1943 int err, encap_len; 1944 1945 if (cfg->collect_md && !is_tnl_info_zero(info)) { 1946 NL_SET_ERR_MSG(extack, 1947 "Device is externally controlled, so attributes (VNI, Port, and so on) must not be specified"); 1948 return -EINVAL; 1949 } 1950 1951 geneve->net = net; 1952 geneve->dev = dev; 1953 1954 t = geneve_find_dev(gn, cfg, info, &tun_on_same_port, &tun_collect_md); 1955 if (t) 1956 return -EBUSY; 1957 1958 /* make enough headroom for basic scenario */ 1959 encap_len = GENEVE_BASE_HLEN + ETH_HLEN; 1960 if (!cfg->collect_md && ip_tunnel_info_af(info) == AF_INET) { 1961 encap_len += sizeof(struct iphdr); 1962 dev->max_mtu -= sizeof(struct iphdr); 1963 } else { 1964 encap_len += sizeof(struct ipv6hdr); 1965 dev->max_mtu -= sizeof(struct ipv6hdr); 1966 } 1967 dev->needed_headroom = encap_len + ETH_HLEN; 1968 1969 if (cfg->collect_md) { 1970 if (tun_on_same_port) { 1971 NL_SET_ERR_MSG(extack, 1972 "There can be only one externally controlled device on a destination port and a source address"); 1973 return -EPERM; 1974 } 1975 } else { 1976 if (tun_collect_md) { 1977 NL_SET_ERR_MSG(extack, 1978 "There already exists an externally controlled device on this destination port and the source address"); 1979 return -EPERM; 1980 } 1981 } 1982 1983 dst_cache_reset(&geneve->cfg.info.dst_cache); 1984 memcpy(&geneve->cfg, cfg, sizeof(*cfg)); 1985 1986 if (geneve->cfg.inner_proto_inherit) { 1987 dev->header_ops = NULL; 1988 dev->type = ARPHRD_NONE; 1989 dev->hard_header_len = 0; 1990 dev->addr_len = 0; 1991 dev->flags = IFF_POINTOPOINT | IFF_NOARP; 1992 } 1993 1994 err = register_netdevice(dev); 1995 if (err) 1996 return err; 1997 1998 list_add(&geneve->next, &gn->geneve_list); 1999 return 0; 2000 } 2001 2002 static void init_tnl_info(struct ip_tunnel_info *info, __u16 dst_port) 2003 { 2004 memset(info, 0, sizeof(*info)); 2005 info->key.tp_dst = htons(dst_port); 2006 } 2007 2008 static int geneve_nl2info(struct nlattr *tb[], struct nlattr *data[], 2009 struct netlink_ext_ack *extack, 2010 struct geneve_config *cfg, bool changelink) 2011 { 2012 struct ip_tunnel_info *info = &cfg->info; 2013 int attrtype; 2014 2015 if (data[IFLA_GENEVE_COLLECT_METADATA]) { 2016 if (changelink) { 2017 attrtype = IFLA_GENEVE_COLLECT_METADATA; 2018 goto change_notsup; 2019 } 2020 2021 cfg->collect_md = true; 2022 cfg->dualstack = true; 2023 } 2024 2025 if ((data[IFLA_GENEVE_LOCAL] || data[IFLA_GENEVE_REMOTE]) && 2026 (data[IFLA_GENEVE_LOCAL6] || data[IFLA_GENEVE_REMOTE6])) { 2027 NL_SET_ERR_MSG(extack, 2028 "Cannot specify both IPv4/IPv6 Remote/Local addresses"); 2029 return -EINVAL; 2030 } 2031 2032 if (data[IFLA_GENEVE_REMOTE]) { 2033 if (changelink && (ip_tunnel_info_af(info) == AF_INET6)) { 2034 attrtype = IFLA_GENEVE_REMOTE; 2035 goto change_notsup; 2036 } 2037 2038 info->key.u.ipv4.dst = 2039 nla_get_in_addr(data[IFLA_GENEVE_REMOTE]); 2040 2041 if (ipv4_is_multicast(info->key.u.ipv4.dst)) { 2042 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE], 2043 "Remote IPv4 address cannot be Multicast"); 2044 return -EINVAL; 2045 } 2046 } 2047 2048 if (data[IFLA_GENEVE_REMOTE6]) { 2049 #if IS_ENABLED(CONFIG_IPV6) 2050 int addr_type; 2051 2052 if (changelink && (ip_tunnel_info_af(info) == AF_INET)) { 2053 attrtype = IFLA_GENEVE_REMOTE6; 2054 goto change_notsup; 2055 } 2056 2057 info->mode = IP_TUNNEL_INFO_IPV6; 2058 info->key.u.ipv6.dst = 2059 nla_get_in6_addr(data[IFLA_GENEVE_REMOTE6]); 2060 2061 addr_type = ipv6_addr_type(&info->key.u.ipv6.dst); 2062 if (addr_type & IPV6_ADDR_LINKLOCAL) { 2063 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE6], 2064 "Remote IPv6 address cannot be link-local"); 2065 return -EINVAL; 2066 } 2067 if (addr_type & IPV6_ADDR_MULTICAST) { 2068 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE6], 2069 "Remote IPv6 address cannot be Multicast"); 2070 return -EINVAL; 2071 } 2072 __set_bit(IP_TUNNEL_CSUM_BIT, info->key.tun_flags); 2073 cfg->use_udp6_rx_checksums = true; 2074 #else 2075 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_REMOTE6], 2076 "IPv6 support not enabled in the kernel"); 2077 return -EPFNOSUPPORT; 2078 #endif 2079 } 2080 2081 if (data[IFLA_GENEVE_LOCAL]) { 2082 if (changelink) { 2083 __be32 src = nla_get_in_addr(data[IFLA_GENEVE_LOCAL]); 2084 2085 if (ip_tunnel_info_af(info) == AF_INET6 || 2086 src != info->key.u.ipv4.src) { 2087 attrtype = IFLA_GENEVE_LOCAL; 2088 goto change_notsup; 2089 } 2090 } else { 2091 info->key.u.ipv4.src = nla_get_in_addr(data[IFLA_GENEVE_LOCAL]); 2092 2093 if (ipv4_is_multicast(info->key.u.ipv4.src)) { 2094 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_LOCAL], 2095 "Local IPv4 address cannot be Multicast"); 2096 return -EINVAL; 2097 } 2098 2099 cfg->dualstack = false; 2100 } 2101 } 2102 2103 if (data[IFLA_GENEVE_LOCAL6]) { 2104 #if IS_ENABLED(CONFIG_IPV6) 2105 if (changelink) { 2106 struct in6_addr src = nla_get_in6_addr(data[IFLA_GENEVE_LOCAL6]); 2107 2108 if (ip_tunnel_info_af(info) == AF_INET || 2109 !ipv6_addr_equal(&src, &info->key.u.ipv6.src)) { 2110 attrtype = IFLA_GENEVE_LOCAL6; 2111 goto change_notsup; 2112 } 2113 } else { 2114 int addr_type; 2115 2116 info->mode = IP_TUNNEL_INFO_IPV6; 2117 info->key.u.ipv6.src = nla_get_in6_addr(data[IFLA_GENEVE_LOCAL6]); 2118 2119 addr_type = ipv6_addr_type(&info->key.u.ipv6.src); 2120 if (addr_type & IPV6_ADDR_LINKLOCAL) { 2121 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_LOCAL6], 2122 "Local IPv6 address cannot be link-local"); 2123 return -EINVAL; 2124 } 2125 if (addr_type & IPV6_ADDR_MULTICAST) { 2126 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_LOCAL6], 2127 "Local IPv6 address cannot be Multicast"); 2128 return -EINVAL; 2129 } 2130 2131 cfg->dualstack = false; 2132 } 2133 #else 2134 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_LOCAL6], 2135 "IPv6 support not enabled in the kernel"); 2136 return -EPFNOSUPPORT; 2137 #endif 2138 } 2139 2140 if (data[IFLA_GENEVE_ID]) { 2141 __u32 vni; 2142 __u8 tvni[3]; 2143 __be64 tunid; 2144 2145 vni = nla_get_u32(data[IFLA_GENEVE_ID]); 2146 tvni[0] = (vni & 0x00ff0000) >> 16; 2147 tvni[1] = (vni & 0x0000ff00) >> 8; 2148 tvni[2] = vni & 0x000000ff; 2149 2150 tunid = vni_to_tunnel_id(tvni); 2151 if (changelink && (tunid != info->key.tun_id)) { 2152 attrtype = IFLA_GENEVE_ID; 2153 goto change_notsup; 2154 } 2155 info->key.tun_id = tunid; 2156 } 2157 2158 if (data[IFLA_GENEVE_TTL_INHERIT]) { 2159 if (nla_get_u8(data[IFLA_GENEVE_TTL_INHERIT])) 2160 cfg->ttl_inherit = true; 2161 else 2162 cfg->ttl_inherit = false; 2163 } else if (data[IFLA_GENEVE_TTL]) { 2164 info->key.ttl = nla_get_u8(data[IFLA_GENEVE_TTL]); 2165 cfg->ttl_inherit = false; 2166 } 2167 2168 if (data[IFLA_GENEVE_TOS]) 2169 info->key.tos = nla_get_u8(data[IFLA_GENEVE_TOS]); 2170 2171 if (data[IFLA_GENEVE_DF]) 2172 cfg->df = nla_get_u8(data[IFLA_GENEVE_DF]); 2173 2174 if (data[IFLA_GENEVE_LABEL]) { 2175 info->key.label = nla_get_be32(data[IFLA_GENEVE_LABEL]) & 2176 IPV6_FLOWLABEL_MASK; 2177 if (info->key.label && (!(info->mode & IP_TUNNEL_INFO_IPV6))) { 2178 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_LABEL], 2179 "Label attribute only applies for IPv6 Geneve devices"); 2180 return -EINVAL; 2181 } 2182 } 2183 2184 if (data[IFLA_GENEVE_PORT]) { 2185 if (changelink) { 2186 attrtype = IFLA_GENEVE_PORT; 2187 goto change_notsup; 2188 } 2189 info->key.tp_dst = nla_get_be16(data[IFLA_GENEVE_PORT]); 2190 } 2191 2192 if (data[IFLA_GENEVE_PORT_RANGE]) { 2193 const struct ifla_geneve_port_range *p; 2194 2195 if (changelink) { 2196 attrtype = IFLA_GENEVE_PORT_RANGE; 2197 goto change_notsup; 2198 } 2199 p = nla_data(data[IFLA_GENEVE_PORT_RANGE]); 2200 cfg->port_min = ntohs(p->low); 2201 cfg->port_max = ntohs(p->high); 2202 } 2203 2204 if (data[IFLA_GENEVE_UDP_CSUM]) { 2205 if (changelink) { 2206 attrtype = IFLA_GENEVE_UDP_CSUM; 2207 goto change_notsup; 2208 } 2209 if (nla_get_u8(data[IFLA_GENEVE_UDP_CSUM])) 2210 __set_bit(IP_TUNNEL_CSUM_BIT, info->key.tun_flags); 2211 } 2212 2213 if (data[IFLA_GENEVE_UDP_ZERO_CSUM6_TX]) { 2214 #if IS_ENABLED(CONFIG_IPV6) 2215 if (changelink) { 2216 attrtype = IFLA_GENEVE_UDP_ZERO_CSUM6_TX; 2217 goto change_notsup; 2218 } 2219 if (nla_get_u8(data[IFLA_GENEVE_UDP_ZERO_CSUM6_TX])) 2220 __clear_bit(IP_TUNNEL_CSUM_BIT, info->key.tun_flags); 2221 #else 2222 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_UDP_ZERO_CSUM6_TX], 2223 "IPv6 support not enabled in the kernel"); 2224 return -EPFNOSUPPORT; 2225 #endif 2226 } 2227 2228 if (data[IFLA_GENEVE_UDP_ZERO_CSUM6_RX]) { 2229 #if IS_ENABLED(CONFIG_IPV6) 2230 if (changelink) { 2231 attrtype = IFLA_GENEVE_UDP_ZERO_CSUM6_RX; 2232 goto change_notsup; 2233 } 2234 if (nla_get_u8(data[IFLA_GENEVE_UDP_ZERO_CSUM6_RX])) 2235 cfg->use_udp6_rx_checksums = false; 2236 #else 2237 NL_SET_ERR_MSG_ATTR(extack, data[IFLA_GENEVE_UDP_ZERO_CSUM6_RX], 2238 "IPv6 support not enabled in the kernel"); 2239 return -EPFNOSUPPORT; 2240 #endif 2241 } 2242 2243 if (data[IFLA_GENEVE_INNER_PROTO_INHERIT]) { 2244 if (changelink) { 2245 attrtype = IFLA_GENEVE_INNER_PROTO_INHERIT; 2246 goto change_notsup; 2247 } 2248 cfg->inner_proto_inherit = true; 2249 } 2250 2251 if (data[IFLA_GENEVE_GRO_HINT]) { 2252 if (changelink) { 2253 attrtype = IFLA_GENEVE_GRO_HINT; 2254 goto change_notsup; 2255 } 2256 cfg->gro_hint = true; 2257 } 2258 2259 return 0; 2260 change_notsup: 2261 NL_SET_ERR_MSG_ATTR(extack, data[attrtype], 2262 "Changing VNI, Port, endpoint IP address family, external, inner_proto_inherit, gro_hint and UDP checksum attributes are not supported"); 2263 return -EOPNOTSUPP; 2264 } 2265 2266 static void geneve_link_config(struct net_device *dev, 2267 struct ip_tunnel_info *info, struct nlattr *tb[]) 2268 { 2269 struct geneve_dev *geneve = netdev_priv(dev); 2270 int ldev_mtu = 0; 2271 2272 if (tb[IFLA_MTU]) { 2273 geneve_change_mtu(dev, nla_get_u32(tb[IFLA_MTU])); 2274 return; 2275 } 2276 2277 switch (ip_tunnel_info_af(info)) { 2278 case AF_INET: { 2279 struct flowi4 fl4 = { .daddr = info->key.u.ipv4.dst }; 2280 struct rtable *rt = ip_route_output_key(geneve->net, &fl4); 2281 2282 if (!IS_ERR(rt) && rt->dst.dev) { 2283 ldev_mtu = rt->dst.dev->mtu - GENEVE_IPV4_HLEN; 2284 ip_rt_put(rt); 2285 } 2286 break; 2287 } 2288 #if IS_ENABLED(CONFIG_IPV6) 2289 case AF_INET6: { 2290 struct rt6_info *rt; 2291 2292 if (!__in6_dev_get(dev)) 2293 break; 2294 2295 rt = rt6_lookup(geneve->net, &info->key.u.ipv6.dst, NULL, 0, 2296 NULL, 0); 2297 2298 if (rt && rt->dst.dev) 2299 ldev_mtu = rt->dst.dev->mtu - GENEVE_IPV6_HLEN; 2300 ip6_rt_put(rt); 2301 break; 2302 } 2303 #endif 2304 } 2305 2306 if (ldev_mtu <= 0) 2307 return; 2308 2309 geneve_change_mtu(dev, ldev_mtu - info->options_len); 2310 } 2311 2312 static int geneve_newlink(struct net_device *dev, 2313 struct rtnl_newlink_params *params, 2314 struct netlink_ext_ack *extack) 2315 { 2316 struct net *link_net = rtnl_newlink_link_net(params); 2317 struct nlattr **data = params->data; 2318 struct nlattr **tb = params->tb; 2319 struct geneve_config cfg = { 2320 .df = GENEVE_DF_UNSET, 2321 .use_udp6_rx_checksums = false, 2322 .ttl_inherit = false, 2323 .collect_md = false, 2324 .dualstack = false, 2325 .port_min = 1, 2326 .port_max = USHRT_MAX, 2327 }; 2328 int err; 2329 2330 init_tnl_info(&cfg.info, GENEVE_UDP_PORT); 2331 err = geneve_nl2info(tb, data, extack, &cfg, false); 2332 if (err) 2333 return err; 2334 2335 err = geneve_configure(link_net, dev, extack, &cfg); 2336 if (err) 2337 return err; 2338 2339 geneve_link_config(dev, &cfg.info, tb); 2340 2341 return 0; 2342 } 2343 2344 /* Quiesces the geneve device data path for both TX and RX. 2345 * 2346 * On transmit geneve checks for non-NULL geneve_sock before it proceeds. 2347 * So, if we set that socket to NULL under RCU and wait for synchronize_net() 2348 * to complete for the existing set of in-flight packets to be transmitted, 2349 * then we would have quiesced the transmit data path. All the future packets 2350 * will get dropped until we unquiesce the data path. 2351 * 2352 * On receive geneve dereference the geneve_sock stashed in the socket. So, 2353 * if we set that to NULL under RCU and wait for synchronize_net() to 2354 * complete, then we would have quiesced the receive data path. 2355 */ 2356 static void geneve_quiesce(struct geneve_dev *geneve, struct geneve_sock **gs4, 2357 struct geneve_sock **gs6) 2358 { 2359 *gs4 = rtnl_dereference(geneve->sock4); 2360 rcu_assign_pointer(geneve->sock4, NULL); 2361 if (*gs4) 2362 rcu_assign_sk_user_data((*gs4)->sk, NULL); 2363 #if IS_ENABLED(CONFIG_IPV6) 2364 *gs6 = rtnl_dereference(geneve->sock6); 2365 rcu_assign_pointer(geneve->sock6, NULL); 2366 if (*gs6) 2367 rcu_assign_sk_user_data((*gs6)->sk, NULL); 2368 #else 2369 *gs6 = NULL; 2370 #endif 2371 synchronize_net(); 2372 } 2373 2374 /* Resumes the geneve device data path for both TX and RX. */ 2375 static void geneve_unquiesce(struct geneve_dev *geneve, struct geneve_sock *gs4, 2376 struct geneve_sock __maybe_unused *gs6) 2377 { 2378 rcu_assign_pointer(geneve->sock4, gs4); 2379 if (gs4) 2380 rcu_assign_sk_user_data(gs4->sk, gs4); 2381 #if IS_ENABLED(CONFIG_IPV6) 2382 rcu_assign_pointer(geneve->sock6, gs6); 2383 if (gs6) 2384 rcu_assign_sk_user_data(gs6->sk, gs6); 2385 #endif 2386 } 2387 2388 static int geneve_changelink(struct net_device *dev, struct nlattr *tb[], 2389 struct nlattr *data[], 2390 struct netlink_ext_ack *extack) 2391 { 2392 struct geneve_dev *geneve = netdev_priv(dev); 2393 struct geneve_sock *gs4, *gs6; 2394 struct geneve_config cfg; 2395 int err; 2396 2397 if (!rtnl_dev_link_net_capable(dev, geneve->net)) 2398 return -EPERM; 2399 2400 /* If the geneve device is configured for metadata (or externally 2401 * controlled, for example, OVS), then nothing can be changed. 2402 */ 2403 if (geneve->cfg.collect_md) 2404 return -EOPNOTSUPP; 2405 2406 /* Start with the existing info. */ 2407 memcpy(&cfg, &geneve->cfg, sizeof(cfg)); 2408 err = geneve_nl2info(tb, data, extack, &cfg, true); 2409 if (err) 2410 return err; 2411 2412 if (!geneve_dst_addr_equal(&geneve->cfg.info, &cfg.info)) { 2413 dst_cache_reset(&cfg.info.dst_cache); 2414 geneve_link_config(dev, &cfg.info, tb); 2415 } 2416 2417 geneve_quiesce(geneve, &gs4, &gs6); 2418 memcpy(&geneve->cfg, &cfg, sizeof(cfg)); 2419 geneve_unquiesce(geneve, gs4, gs6); 2420 2421 return 0; 2422 } 2423 2424 static void geneve_dellink(struct net_device *dev, struct list_head *head) 2425 { 2426 struct geneve_dev *geneve = netdev_priv(dev); 2427 2428 list_del(&geneve->next); 2429 unregister_netdevice_queue(dev, head); 2430 } 2431 2432 static size_t geneve_get_size(const struct net_device *dev) 2433 { 2434 return nla_total_size(sizeof(__u32)) + /* IFLA_GENEVE_ID */ 2435 nla_total_size(sizeof(struct in6_addr)) + /* IFLA_GENEVE_REMOTE{6} */ 2436 nla_total_size(sizeof(struct in6_addr)) + /* IFLA_GENEVE_LOCAL{6} */ 2437 nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_TTL */ 2438 nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_TOS */ 2439 nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_DF */ 2440 nla_total_size(sizeof(__be32)) + /* IFLA_GENEVE_LABEL */ 2441 nla_total_size(sizeof(__be16)) + /* IFLA_GENEVE_PORT */ 2442 nla_total_size(0) + /* IFLA_GENEVE_COLLECT_METADATA */ 2443 nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_UDP_CSUM */ 2444 nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_UDP_ZERO_CSUM6_TX */ 2445 nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_UDP_ZERO_CSUM6_RX */ 2446 nla_total_size(sizeof(__u8)) + /* IFLA_GENEVE_TTL_INHERIT */ 2447 nla_total_size(0) + /* IFLA_GENEVE_INNER_PROTO_INHERIT */ 2448 nla_total_size(sizeof(struct ifla_geneve_port_range)) + /* IFLA_GENEVE_PORT_RANGE */ 2449 nla_total_size(0) + /* IFLA_GENEVE_GRO_HINT */ 2450 0; 2451 } 2452 2453 static int geneve_fill_info(struct sk_buff *skb, const struct net_device *dev) 2454 { 2455 struct geneve_dev *geneve = netdev_priv(dev); 2456 struct ip_tunnel_info *info = &geneve->cfg.info; 2457 bool ttl_inherit = geneve->cfg.ttl_inherit; 2458 bool metadata = geneve->cfg.collect_md; 2459 struct ifla_geneve_port_range ports = { 2460 .low = htons(geneve->cfg.port_min), 2461 .high = htons(geneve->cfg.port_max), 2462 }; 2463 __u8 tmp_vni[3]; 2464 __u32 vni; 2465 2466 tunnel_id_to_vni(info->key.tun_id, tmp_vni); 2467 vni = (tmp_vni[0] << 16) | (tmp_vni[1] << 8) | tmp_vni[2]; 2468 if (nla_put_u32(skb, IFLA_GENEVE_ID, vni)) 2469 goto nla_put_failure; 2470 2471 if (!metadata && ip_tunnel_info_af(info) == AF_INET) { 2472 if (nla_put_in_addr(skb, IFLA_GENEVE_REMOTE, 2473 info->key.u.ipv4.dst)) 2474 goto nla_put_failure; 2475 if (nla_put_u8(skb, IFLA_GENEVE_UDP_CSUM, 2476 test_bit(IP_TUNNEL_CSUM_BIT, 2477 info->key.tun_flags))) 2478 goto nla_put_failure; 2479 2480 #if IS_ENABLED(CONFIG_IPV6) 2481 } else if (!metadata) { 2482 if (nla_put_in6_addr(skb, IFLA_GENEVE_REMOTE6, 2483 &info->key.u.ipv6.dst)) 2484 goto nla_put_failure; 2485 if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_TX, 2486 !test_bit(IP_TUNNEL_CSUM_BIT, 2487 info->key.tun_flags))) 2488 goto nla_put_failure; 2489 #endif 2490 } 2491 2492 if (!geneve->cfg.dualstack) { 2493 if (ip_tunnel_info_af(info) == AF_INET) { 2494 if ((info->key.u.ipv4.src || 2495 geneve->cfg.collect_md) && 2496 nla_put_in_addr(skb, IFLA_GENEVE_LOCAL, 2497 info->key.u.ipv4.src)) 2498 goto nla_put_failure; 2499 #if IS_ENABLED(CONFIG_IPV6) 2500 } else { 2501 if ((!ipv6_addr_any(&info->key.u.ipv6.src) || 2502 geneve->cfg.collect_md) && 2503 nla_put_in6_addr(skb, IFLA_GENEVE_LOCAL6, 2504 &info->key.u.ipv6.src)) 2505 goto nla_put_failure; 2506 #endif 2507 } 2508 } 2509 2510 if (nla_put_u8(skb, IFLA_GENEVE_TTL, info->key.ttl) || 2511 nla_put_u8(skb, IFLA_GENEVE_TOS, info->key.tos) || 2512 nla_put_be32(skb, IFLA_GENEVE_LABEL, info->key.label)) 2513 goto nla_put_failure; 2514 2515 if (nla_put_u8(skb, IFLA_GENEVE_DF, geneve->cfg.df)) 2516 goto nla_put_failure; 2517 2518 if (nla_put_be16(skb, IFLA_GENEVE_PORT, info->key.tp_dst)) 2519 goto nla_put_failure; 2520 2521 if (metadata && nla_put_flag(skb, IFLA_GENEVE_COLLECT_METADATA)) 2522 goto nla_put_failure; 2523 2524 #if IS_ENABLED(CONFIG_IPV6) 2525 if (nla_put_u8(skb, IFLA_GENEVE_UDP_ZERO_CSUM6_RX, 2526 !geneve->cfg.use_udp6_rx_checksums)) 2527 goto nla_put_failure; 2528 #endif 2529 2530 if (nla_put_u8(skb, IFLA_GENEVE_TTL_INHERIT, ttl_inherit)) 2531 goto nla_put_failure; 2532 2533 if (geneve->cfg.inner_proto_inherit && 2534 nla_put_flag(skb, IFLA_GENEVE_INNER_PROTO_INHERIT)) 2535 goto nla_put_failure; 2536 2537 if (nla_put(skb, IFLA_GENEVE_PORT_RANGE, sizeof(ports), &ports)) 2538 goto nla_put_failure; 2539 2540 if (geneve->cfg.gro_hint && 2541 nla_put_flag(skb, IFLA_GENEVE_GRO_HINT)) 2542 goto nla_put_failure; 2543 2544 return 0; 2545 2546 nla_put_failure: 2547 return -EMSGSIZE; 2548 } 2549 2550 static struct rtnl_link_ops geneve_link_ops __read_mostly = { 2551 .kind = "geneve", 2552 .maxtype = IFLA_GENEVE_MAX, 2553 .policy = geneve_policy, 2554 .priv_size = sizeof(struct geneve_dev), 2555 .setup = geneve_setup, 2556 .validate = geneve_validate, 2557 .newlink = geneve_newlink, 2558 .changelink = geneve_changelink, 2559 .dellink = geneve_dellink, 2560 .get_size = geneve_get_size, 2561 .fill_info = geneve_fill_info, 2562 }; 2563 2564 struct net_device *geneve_dev_create_fb(struct net *net, const char *name, 2565 u8 name_assign_type, u16 dst_port) 2566 { 2567 struct nlattr *tb[IFLA_MAX + 1]; 2568 struct net_device *dev; 2569 LIST_HEAD(list_kill); 2570 int err; 2571 struct geneve_config cfg = { 2572 .df = GENEVE_DF_UNSET, 2573 .use_udp6_rx_checksums = true, 2574 .ttl_inherit = false, 2575 .collect_md = true, 2576 .dualstack = true, 2577 .port_min = 1, 2578 .port_max = USHRT_MAX, 2579 }; 2580 2581 memset(tb, 0, sizeof(tb)); 2582 dev = rtnl_create_link(net, name, name_assign_type, 2583 &geneve_link_ops, tb, NULL); 2584 if (IS_ERR(dev)) 2585 return dev; 2586 2587 init_tnl_info(&cfg.info, dst_port); 2588 err = geneve_configure(net, dev, NULL, &cfg); 2589 if (err) { 2590 free_netdev(dev); 2591 return ERR_PTR(err); 2592 } 2593 2594 /* openvswitch users expect packet sizes to be unrestricted, 2595 * so set the largest MTU we can. 2596 */ 2597 err = geneve_change_mtu(dev, IP_MAX_MTU); 2598 if (err) 2599 goto err; 2600 2601 err = rtnl_configure_link(dev, NULL, 0, NULL); 2602 if (err < 0) 2603 goto err; 2604 2605 return dev; 2606 err: 2607 geneve_dellink(dev, &list_kill); 2608 unregister_netdevice_many(&list_kill); 2609 return ERR_PTR(err); 2610 } 2611 EXPORT_SYMBOL_GPL(geneve_dev_create_fb); 2612 2613 static int geneve_netdevice_event(struct notifier_block *unused, 2614 unsigned long event, void *ptr) 2615 { 2616 struct net_device *dev = netdev_notifier_info_to_dev(ptr); 2617 2618 if (event == NETDEV_UDP_TUNNEL_PUSH_INFO) 2619 geneve_offload_rx_ports(dev, true); 2620 else if (event == NETDEV_UDP_TUNNEL_DROP_INFO) 2621 geneve_offload_rx_ports(dev, false); 2622 2623 return NOTIFY_DONE; 2624 } 2625 2626 static struct notifier_block geneve_notifier_block __read_mostly = { 2627 .notifier_call = geneve_netdevice_event, 2628 }; 2629 2630 static __net_init int geneve_init_net(struct net *net) 2631 { 2632 struct geneve_net *gn = net_generic(net, geneve_net_id); 2633 2634 INIT_LIST_HEAD(&gn->geneve_list); 2635 INIT_LIST_HEAD(&gn->sock_list); 2636 return 0; 2637 } 2638 2639 static void __net_exit geneve_exit_rtnl_net(struct net *net, 2640 struct list_head *dev_to_kill) 2641 { 2642 struct geneve_net *gn = net_generic(net, geneve_net_id); 2643 struct geneve_dev *geneve, *next; 2644 2645 list_for_each_entry_safe(geneve, next, &gn->geneve_list, next) 2646 geneve_dellink(geneve->dev, dev_to_kill); 2647 } 2648 2649 static void __net_exit geneve_exit_net(struct net *net) 2650 { 2651 const struct geneve_net *gn = net_generic(net, geneve_net_id); 2652 2653 WARN_ON_ONCE(!list_empty(&gn->sock_list)); 2654 } 2655 2656 static struct pernet_operations geneve_net_ops = { 2657 .init = geneve_init_net, 2658 .exit_rtnl = geneve_exit_rtnl_net, 2659 .exit = geneve_exit_net, 2660 .id = &geneve_net_id, 2661 .size = sizeof(struct geneve_net), 2662 }; 2663 2664 static int __init geneve_init_module(void) 2665 { 2666 int rc; 2667 2668 rc = register_pernet_subsys(&geneve_net_ops); 2669 if (rc) 2670 goto out1; 2671 2672 rc = register_netdevice_notifier(&geneve_notifier_block); 2673 if (rc) 2674 goto out2; 2675 2676 rc = rtnl_link_register(&geneve_link_ops); 2677 if (rc) 2678 goto out3; 2679 2680 return 0; 2681 out3: 2682 unregister_netdevice_notifier(&geneve_notifier_block); 2683 out2: 2684 unregister_pernet_subsys(&geneve_net_ops); 2685 out1: 2686 return rc; 2687 } 2688 late_initcall(geneve_init_module); 2689 2690 static void __exit geneve_cleanup_module(void) 2691 { 2692 rtnl_link_unregister(&geneve_link_ops); 2693 unregister_netdevice_notifier(&geneve_notifier_block); 2694 unregister_pernet_subsys(&geneve_net_ops); 2695 } 2696 module_exit(geneve_cleanup_module); 2697 2698 MODULE_LICENSE("GPL"); 2699 MODULE_VERSION(GENEVE_NETDEV_VER); 2700 MODULE_AUTHOR("John W. Linville <linville@tuxdriver.com>"); 2701 MODULE_DESCRIPTION("Interface driver for GENEVE encapsulated traffic"); 2702 MODULE_ALIAS_RTNL_LINK("geneve"); 2703