1 /* Copyright (c) 2014 Mahesh Bandewar <maheshb@google.com> 2 * 3 * This program is free software; you can redistribute it and/or 4 * modify it under the terms of the GNU General Public License as 5 * published by the Free Software Foundation; either version 2 of 6 * the License, or (at your option) any later version. 7 * 8 */ 9 10 #include "ipvlan.h" 11 12 static u32 ipvlan_jhash_secret __read_mostly; 13 14 void ipvlan_init_secret(void) 15 { 16 net_get_random_once(&ipvlan_jhash_secret, sizeof(ipvlan_jhash_secret)); 17 } 18 19 static void ipvlan_count_rx(const struct ipvl_dev *ipvlan, 20 unsigned int len, bool success, bool mcast) 21 { 22 if (!ipvlan) 23 return; 24 25 if (likely(success)) { 26 struct ipvl_pcpu_stats *pcptr; 27 28 pcptr = this_cpu_ptr(ipvlan->pcpu_stats); 29 u64_stats_update_begin(&pcptr->syncp); 30 pcptr->rx_pkts++; 31 pcptr->rx_bytes += len; 32 if (mcast) 33 pcptr->rx_mcast++; 34 u64_stats_update_end(&pcptr->syncp); 35 } else { 36 this_cpu_inc(ipvlan->pcpu_stats->rx_errs); 37 } 38 } 39 40 static u8 ipvlan_get_v6_hash(const void *iaddr) 41 { 42 const struct in6_addr *ip6_addr = iaddr; 43 44 return __ipv6_addr_jhash(ip6_addr, ipvlan_jhash_secret) & 45 IPVLAN_HASH_MASK; 46 } 47 48 static u8 ipvlan_get_v4_hash(const void *iaddr) 49 { 50 const struct in_addr *ip4_addr = iaddr; 51 52 return jhash_1word(ip4_addr->s_addr, ipvlan_jhash_secret) & 53 IPVLAN_HASH_MASK; 54 } 55 56 static struct ipvl_addr *ipvlan_ht_addr_lookup(const struct ipvl_port *port, 57 const void *iaddr, bool is_v6) 58 { 59 struct ipvl_addr *addr; 60 u8 hash; 61 62 hash = is_v6 ? ipvlan_get_v6_hash(iaddr) : 63 ipvlan_get_v4_hash(iaddr); 64 hlist_for_each_entry_rcu(addr, &port->hlhead[hash], hlnode) { 65 if (is_v6 && addr->atype == IPVL_IPV6 && 66 ipv6_addr_equal(&addr->ip6addr, iaddr)) 67 return addr; 68 else if (!is_v6 && addr->atype == IPVL_IPV4 && 69 addr->ip4addr.s_addr == 70 ((struct in_addr *)iaddr)->s_addr) 71 return addr; 72 } 73 return NULL; 74 } 75 76 void ipvlan_ht_addr_add(struct ipvl_dev *ipvlan, struct ipvl_addr *addr) 77 { 78 struct ipvl_port *port = ipvlan->port; 79 u8 hash; 80 81 hash = (addr->atype == IPVL_IPV6) ? 82 ipvlan_get_v6_hash(&addr->ip6addr) : 83 ipvlan_get_v4_hash(&addr->ip4addr); 84 if (hlist_unhashed(&addr->hlnode)) 85 hlist_add_head_rcu(&addr->hlnode, &port->hlhead[hash]); 86 } 87 88 void ipvlan_ht_addr_del(struct ipvl_addr *addr) 89 { 90 hlist_del_init_rcu(&addr->hlnode); 91 } 92 93 struct ipvl_addr *ipvlan_find_addr(const struct ipvl_dev *ipvlan, 94 const void *iaddr, bool is_v6) 95 { 96 struct ipvl_addr *addr; 97 98 list_for_each_entry(addr, &ipvlan->addrs, anode) { 99 if ((is_v6 && addr->atype == IPVL_IPV6 && 100 ipv6_addr_equal(&addr->ip6addr, iaddr)) || 101 (!is_v6 && addr->atype == IPVL_IPV4 && 102 addr->ip4addr.s_addr == ((struct in_addr *)iaddr)->s_addr)) 103 return addr; 104 } 105 return NULL; 106 } 107 108 bool ipvlan_addr_busy(struct ipvl_port *port, void *iaddr, bool is_v6) 109 { 110 struct ipvl_dev *ipvlan; 111 112 ASSERT_RTNL(); 113 114 list_for_each_entry(ipvlan, &port->ipvlans, pnode) { 115 if (ipvlan_find_addr(ipvlan, iaddr, is_v6)) 116 return true; 117 } 118 return false; 119 } 120 121 static void *ipvlan_get_L3_hdr(struct sk_buff *skb, int *type) 122 { 123 void *lyr3h = NULL; 124 125 switch (skb->protocol) { 126 case htons(ETH_P_ARP): { 127 struct arphdr *arph; 128 129 if (unlikely(!pskb_may_pull(skb, sizeof(*arph)))) 130 return NULL; 131 132 arph = arp_hdr(skb); 133 *type = IPVL_ARP; 134 lyr3h = arph; 135 break; 136 } 137 case htons(ETH_P_IP): { 138 u32 pktlen; 139 struct iphdr *ip4h; 140 141 if (unlikely(!pskb_may_pull(skb, sizeof(*ip4h)))) 142 return NULL; 143 144 ip4h = ip_hdr(skb); 145 pktlen = ntohs(ip4h->tot_len); 146 if (ip4h->ihl < 5 || ip4h->version != 4) 147 return NULL; 148 if (skb->len < pktlen || pktlen < (ip4h->ihl * 4)) 149 return NULL; 150 151 *type = IPVL_IPV4; 152 lyr3h = ip4h; 153 break; 154 } 155 case htons(ETH_P_IPV6): { 156 struct ipv6hdr *ip6h; 157 158 if (unlikely(!pskb_may_pull(skb, sizeof(*ip6h)))) 159 return NULL; 160 161 ip6h = ipv6_hdr(skb); 162 if (ip6h->version != 6) 163 return NULL; 164 165 *type = IPVL_IPV6; 166 lyr3h = ip6h; 167 /* Only Neighbour Solicitation pkts need different treatment */ 168 if (ipv6_addr_any(&ip6h->saddr) && 169 ip6h->nexthdr == NEXTHDR_ICMP) { 170 *type = IPVL_ICMPV6; 171 lyr3h = ip6h + 1; 172 } 173 break; 174 } 175 default: 176 return NULL; 177 } 178 179 return lyr3h; 180 } 181 182 unsigned int ipvlan_mac_hash(const unsigned char *addr) 183 { 184 u32 hash = jhash_1word(__get_unaligned_cpu32(addr+2), 185 ipvlan_jhash_secret); 186 187 return hash & IPVLAN_MAC_FILTER_MASK; 188 } 189 190 void ipvlan_process_multicast(struct work_struct *work) 191 { 192 struct ipvl_port *port = container_of(work, struct ipvl_port, wq); 193 struct ethhdr *ethh; 194 struct ipvl_dev *ipvlan; 195 struct sk_buff *skb, *nskb; 196 struct sk_buff_head list; 197 unsigned int len; 198 unsigned int mac_hash; 199 int ret; 200 u8 pkt_type; 201 bool tx_pkt; 202 203 __skb_queue_head_init(&list); 204 205 spin_lock_bh(&port->backlog.lock); 206 skb_queue_splice_tail_init(&port->backlog, &list); 207 spin_unlock_bh(&port->backlog.lock); 208 209 while ((skb = __skb_dequeue(&list)) != NULL) { 210 struct net_device *dev = skb->dev; 211 bool consumed = false; 212 213 ethh = eth_hdr(skb); 214 tx_pkt = IPVL_SKB_CB(skb)->tx_pkt; 215 mac_hash = ipvlan_mac_hash(ethh->h_dest); 216 217 if (ether_addr_equal(ethh->h_dest, port->dev->broadcast)) 218 pkt_type = PACKET_BROADCAST; 219 else 220 pkt_type = PACKET_MULTICAST; 221 222 rcu_read_lock(); 223 list_for_each_entry_rcu(ipvlan, &port->ipvlans, pnode) { 224 if (tx_pkt && (ipvlan->dev == skb->dev)) 225 continue; 226 if (!test_bit(mac_hash, ipvlan->mac_filters)) 227 continue; 228 if (!(ipvlan->dev->flags & IFF_UP)) 229 continue; 230 ret = NET_RX_DROP; 231 len = skb->len + ETH_HLEN; 232 nskb = skb_clone(skb, GFP_ATOMIC); 233 local_bh_disable(); 234 if (nskb) { 235 consumed = true; 236 nskb->pkt_type = pkt_type; 237 nskb->dev = ipvlan->dev; 238 if (tx_pkt) 239 ret = dev_forward_skb(ipvlan->dev, nskb); 240 else 241 ret = netif_rx(nskb); 242 } 243 ipvlan_count_rx(ipvlan, len, ret == NET_RX_SUCCESS, true); 244 local_bh_enable(); 245 } 246 rcu_read_unlock(); 247 248 if (tx_pkt) { 249 /* If the packet originated here, send it out. */ 250 skb->dev = port->dev; 251 skb->pkt_type = pkt_type; 252 dev_queue_xmit(skb); 253 } else { 254 if (consumed) 255 consume_skb(skb); 256 else 257 kfree_skb(skb); 258 } 259 if (dev) 260 dev_put(dev); 261 } 262 } 263 264 static void ipvlan_skb_crossing_ns(struct sk_buff *skb, struct net_device *dev) 265 { 266 bool xnet = true; 267 268 if (dev) 269 xnet = !net_eq(dev_net(skb->dev), dev_net(dev)); 270 271 skb_scrub_packet(skb, xnet); 272 if (dev) 273 skb->dev = dev; 274 } 275 276 static int ipvlan_rcv_frame(struct ipvl_addr *addr, struct sk_buff **pskb, 277 bool local) 278 { 279 struct ipvl_dev *ipvlan = addr->master; 280 struct net_device *dev = ipvlan->dev; 281 unsigned int len; 282 rx_handler_result_t ret = RX_HANDLER_CONSUMED; 283 bool success = false; 284 struct sk_buff *skb = *pskb; 285 286 len = skb->len + ETH_HLEN; 287 /* Only packets exchanged between two local slaves need to have 288 * device-up check as well as skb-share check. 289 */ 290 if (local) { 291 if (unlikely(!(dev->flags & IFF_UP))) { 292 kfree_skb(skb); 293 goto out; 294 } 295 296 skb = skb_share_check(skb, GFP_ATOMIC); 297 if (!skb) 298 goto out; 299 300 *pskb = skb; 301 } 302 ipvlan_skb_crossing_ns(skb, dev); 303 304 if (local) { 305 skb->pkt_type = PACKET_HOST; 306 if (dev_forward_skb(ipvlan->dev, skb) == NET_RX_SUCCESS) 307 success = true; 308 } else { 309 ret = RX_HANDLER_ANOTHER; 310 success = true; 311 } 312 313 out: 314 ipvlan_count_rx(ipvlan, len, success, false); 315 return ret; 316 } 317 318 static struct ipvl_addr *ipvlan_addr_lookup(struct ipvl_port *port, 319 void *lyr3h, int addr_type, 320 bool use_dest) 321 { 322 struct ipvl_addr *addr = NULL; 323 324 if (addr_type == IPVL_IPV6) { 325 struct ipv6hdr *ip6h; 326 struct in6_addr *i6addr; 327 328 ip6h = (struct ipv6hdr *)lyr3h; 329 i6addr = use_dest ? &ip6h->daddr : &ip6h->saddr; 330 addr = ipvlan_ht_addr_lookup(port, i6addr, true); 331 } else if (addr_type == IPVL_ICMPV6) { 332 struct nd_msg *ndmh; 333 struct in6_addr *i6addr; 334 335 /* Make sure that the NeighborSolicitation ICMPv6 packets 336 * are handled to avoid DAD issue. 337 */ 338 ndmh = (struct nd_msg *)lyr3h; 339 if (ndmh->icmph.icmp6_type == NDISC_NEIGHBOUR_SOLICITATION) { 340 i6addr = &ndmh->target; 341 addr = ipvlan_ht_addr_lookup(port, i6addr, true); 342 } 343 } else if (addr_type == IPVL_IPV4) { 344 struct iphdr *ip4h; 345 __be32 *i4addr; 346 347 ip4h = (struct iphdr *)lyr3h; 348 i4addr = use_dest ? &ip4h->daddr : &ip4h->saddr; 349 addr = ipvlan_ht_addr_lookup(port, i4addr, false); 350 } else if (addr_type == IPVL_ARP) { 351 struct arphdr *arph; 352 unsigned char *arp_ptr; 353 __be32 dip; 354 355 arph = (struct arphdr *)lyr3h; 356 arp_ptr = (unsigned char *)(arph + 1); 357 if (use_dest) 358 arp_ptr += (2 * port->dev->addr_len) + 4; 359 else 360 arp_ptr += port->dev->addr_len; 361 362 memcpy(&dip, arp_ptr, 4); 363 addr = ipvlan_ht_addr_lookup(port, &dip, false); 364 } 365 366 return addr; 367 } 368 369 static int ipvlan_process_v4_outbound(struct sk_buff *skb) 370 { 371 const struct iphdr *ip4h = ip_hdr(skb); 372 struct net_device *dev = skb->dev; 373 struct net *net = dev_net(dev); 374 struct rtable *rt; 375 int err, ret = NET_XMIT_DROP; 376 struct flowi4 fl4 = { 377 .flowi4_oif = dev->ifindex, 378 .flowi4_tos = RT_TOS(ip4h->tos), 379 .flowi4_flags = FLOWI_FLAG_ANYSRC, 380 .daddr = ip4h->daddr, 381 .saddr = ip4h->saddr, 382 }; 383 384 rt = ip_route_output_flow(net, &fl4, NULL); 385 if (IS_ERR(rt)) 386 goto err; 387 388 if (rt->rt_type != RTN_UNICAST && rt->rt_type != RTN_LOCAL) { 389 ip_rt_put(rt); 390 goto err; 391 } 392 skb_dst_set(skb, &rt->dst); 393 err = ip_local_out(net, skb->sk, skb); 394 if (unlikely(net_xmit_eval(err))) 395 dev->stats.tx_errors++; 396 else 397 ret = NET_XMIT_SUCCESS; 398 goto out; 399 err: 400 dev->stats.tx_errors++; 401 kfree_skb(skb); 402 out: 403 return ret; 404 } 405 406 static int ipvlan_process_v6_outbound(struct sk_buff *skb) 407 { 408 const struct ipv6hdr *ip6h = ipv6_hdr(skb); 409 struct net_device *dev = skb->dev; 410 struct net *net = dev_net(dev); 411 struct dst_entry *dst; 412 int err, ret = NET_XMIT_DROP; 413 struct flowi6 fl6 = { 414 .flowi6_iif = dev->ifindex, 415 .daddr = ip6h->daddr, 416 .saddr = ip6h->saddr, 417 .flowi6_flags = FLOWI_FLAG_ANYSRC, 418 .flowlabel = ip6_flowinfo(ip6h), 419 .flowi6_mark = skb->mark, 420 .flowi6_proto = ip6h->nexthdr, 421 }; 422 423 dst = ip6_route_output(net, NULL, &fl6); 424 if (dst->error) { 425 ret = dst->error; 426 dst_release(dst); 427 goto err; 428 } 429 skb_dst_set(skb, dst); 430 err = ip6_local_out(net, skb->sk, skb); 431 if (unlikely(net_xmit_eval(err))) 432 dev->stats.tx_errors++; 433 else 434 ret = NET_XMIT_SUCCESS; 435 goto out; 436 err: 437 dev->stats.tx_errors++; 438 kfree_skb(skb); 439 out: 440 return ret; 441 } 442 443 static int ipvlan_process_outbound(struct sk_buff *skb) 444 { 445 struct ethhdr *ethh = eth_hdr(skb); 446 int ret = NET_XMIT_DROP; 447 448 /* In this mode we dont care about multicast and broadcast traffic */ 449 if (is_multicast_ether_addr(ethh->h_dest)) { 450 pr_warn_ratelimited("Dropped {multi|broad}cast of type= [%x]\n", 451 ntohs(skb->protocol)); 452 kfree_skb(skb); 453 goto out; 454 } 455 456 /* The ipvlan is a pseudo-L2 device, so the packets that we receive 457 * will have L2; which need to discarded and processed further 458 * in the net-ns of the main-device. 459 */ 460 if (skb_mac_header_was_set(skb)) { 461 skb_pull(skb, sizeof(*ethh)); 462 skb->mac_header = (typeof(skb->mac_header))~0U; 463 skb_reset_network_header(skb); 464 } 465 466 if (skb->protocol == htons(ETH_P_IPV6)) 467 ret = ipvlan_process_v6_outbound(skb); 468 else if (skb->protocol == htons(ETH_P_IP)) 469 ret = ipvlan_process_v4_outbound(skb); 470 else { 471 pr_warn_ratelimited("Dropped outbound packet type=%x\n", 472 ntohs(skb->protocol)); 473 kfree_skb(skb); 474 } 475 out: 476 return ret; 477 } 478 479 static void ipvlan_multicast_enqueue(struct ipvl_port *port, 480 struct sk_buff *skb, bool tx_pkt) 481 { 482 if (skb->protocol == htons(ETH_P_PAUSE)) { 483 kfree_skb(skb); 484 return; 485 } 486 487 /* Record that the deferred packet is from TX or RX path. By 488 * looking at mac-addresses on packet will lead to erronus decisions. 489 * (This would be true for a loopback-mode on master device or a 490 * hair-pin mode of the switch.) 491 */ 492 IPVL_SKB_CB(skb)->tx_pkt = tx_pkt; 493 494 spin_lock(&port->backlog.lock); 495 if (skb_queue_len(&port->backlog) < IPVLAN_QBACKLOG_LIMIT) { 496 if (skb->dev) 497 dev_hold(skb->dev); 498 __skb_queue_tail(&port->backlog, skb); 499 spin_unlock(&port->backlog.lock); 500 schedule_work(&port->wq); 501 } else { 502 spin_unlock(&port->backlog.lock); 503 atomic_long_inc(&skb->dev->rx_dropped); 504 kfree_skb(skb); 505 } 506 } 507 508 static int ipvlan_xmit_mode_l3(struct sk_buff *skb, struct net_device *dev) 509 { 510 const struct ipvl_dev *ipvlan = netdev_priv(dev); 511 void *lyr3h; 512 struct ipvl_addr *addr; 513 int addr_type; 514 515 lyr3h = ipvlan_get_L3_hdr(skb, &addr_type); 516 if (!lyr3h) 517 goto out; 518 519 addr = ipvlan_addr_lookup(ipvlan->port, lyr3h, addr_type, true); 520 if (addr) 521 return ipvlan_rcv_frame(addr, &skb, true); 522 523 out: 524 ipvlan_skb_crossing_ns(skb, ipvlan->phy_dev); 525 return ipvlan_process_outbound(skb); 526 } 527 528 static int ipvlan_xmit_mode_l2(struct sk_buff *skb, struct net_device *dev) 529 { 530 const struct ipvl_dev *ipvlan = netdev_priv(dev); 531 struct ethhdr *eth = eth_hdr(skb); 532 struct ipvl_addr *addr; 533 void *lyr3h; 534 int addr_type; 535 536 if (ether_addr_equal(eth->h_dest, eth->h_source)) { 537 lyr3h = ipvlan_get_L3_hdr(skb, &addr_type); 538 if (lyr3h) { 539 addr = ipvlan_addr_lookup(ipvlan->port, lyr3h, addr_type, true); 540 if (addr) 541 return ipvlan_rcv_frame(addr, &skb, true); 542 } 543 skb = skb_share_check(skb, GFP_ATOMIC); 544 if (!skb) 545 return NET_XMIT_DROP; 546 547 /* Packet definitely does not belong to any of the 548 * virtual devices, but the dest is local. So forward 549 * the skb for the main-dev. At the RX side we just return 550 * RX_PASS for it to be processed further on the stack. 551 */ 552 return dev_forward_skb(ipvlan->phy_dev, skb); 553 554 } else if (is_multicast_ether_addr(eth->h_dest)) { 555 ipvlan_skb_crossing_ns(skb, NULL); 556 ipvlan_multicast_enqueue(ipvlan->port, skb, true); 557 return NET_XMIT_SUCCESS; 558 } 559 560 ipvlan_skb_crossing_ns(skb, ipvlan->phy_dev); 561 return dev_queue_xmit(skb); 562 } 563 564 int ipvlan_queue_xmit(struct sk_buff *skb, struct net_device *dev) 565 { 566 struct ipvl_dev *ipvlan = netdev_priv(dev); 567 struct ipvl_port *port = ipvlan_port_get_rcu_bh(ipvlan->phy_dev); 568 569 if (!port) 570 goto out; 571 572 if (unlikely(!pskb_may_pull(skb, sizeof(struct ethhdr)))) 573 goto out; 574 575 switch(port->mode) { 576 case IPVLAN_MODE_L2: 577 return ipvlan_xmit_mode_l2(skb, dev); 578 case IPVLAN_MODE_L3: 579 case IPVLAN_MODE_L3S: 580 return ipvlan_xmit_mode_l3(skb, dev); 581 } 582 583 /* Should not reach here */ 584 WARN_ONCE(true, "ipvlan_queue_xmit() called for mode = [%hx]\n", 585 port->mode); 586 out: 587 kfree_skb(skb); 588 return NET_XMIT_DROP; 589 } 590 591 static bool ipvlan_external_frame(struct sk_buff *skb, struct ipvl_port *port) 592 { 593 struct ethhdr *eth = eth_hdr(skb); 594 struct ipvl_addr *addr; 595 void *lyr3h; 596 int addr_type; 597 598 if (ether_addr_equal(eth->h_source, skb->dev->dev_addr)) { 599 lyr3h = ipvlan_get_L3_hdr(skb, &addr_type); 600 if (!lyr3h) 601 return true; 602 603 addr = ipvlan_addr_lookup(port, lyr3h, addr_type, false); 604 if (addr) 605 return false; 606 } 607 608 return true; 609 } 610 611 static rx_handler_result_t ipvlan_handle_mode_l3(struct sk_buff **pskb, 612 struct ipvl_port *port) 613 { 614 void *lyr3h; 615 int addr_type; 616 struct ipvl_addr *addr; 617 struct sk_buff *skb = *pskb; 618 rx_handler_result_t ret = RX_HANDLER_PASS; 619 620 lyr3h = ipvlan_get_L3_hdr(skb, &addr_type); 621 if (!lyr3h) 622 goto out; 623 624 addr = ipvlan_addr_lookup(port, lyr3h, addr_type, true); 625 if (addr) 626 ret = ipvlan_rcv_frame(addr, pskb, false); 627 628 out: 629 return ret; 630 } 631 632 static rx_handler_result_t ipvlan_handle_mode_l2(struct sk_buff **pskb, 633 struct ipvl_port *port) 634 { 635 struct sk_buff *skb = *pskb; 636 struct ethhdr *eth = eth_hdr(skb); 637 rx_handler_result_t ret = RX_HANDLER_PASS; 638 void *lyr3h; 639 int addr_type; 640 641 if (is_multicast_ether_addr(eth->h_dest)) { 642 if (ipvlan_external_frame(skb, port)) { 643 struct sk_buff *nskb = skb_clone(skb, GFP_ATOMIC); 644 645 /* External frames are queued for device local 646 * distribution, but a copy is given to master 647 * straight away to avoid sending duplicates later 648 * when work-queue processes this frame. This is 649 * achieved by returning RX_HANDLER_PASS. 650 */ 651 if (nskb) { 652 ipvlan_skb_crossing_ns(nskb, NULL); 653 ipvlan_multicast_enqueue(port, nskb, false); 654 } 655 } 656 } else { 657 struct ipvl_addr *addr; 658 659 lyr3h = ipvlan_get_L3_hdr(skb, &addr_type); 660 if (!lyr3h) 661 return ret; 662 663 addr = ipvlan_addr_lookup(port, lyr3h, addr_type, true); 664 if (addr) 665 ret = ipvlan_rcv_frame(addr, pskb, false); 666 } 667 668 return ret; 669 } 670 671 rx_handler_result_t ipvlan_handle_frame(struct sk_buff **pskb) 672 { 673 struct sk_buff *skb = *pskb; 674 struct ipvl_port *port = ipvlan_port_get_rcu(skb->dev); 675 676 if (!port) 677 return RX_HANDLER_PASS; 678 679 switch (port->mode) { 680 case IPVLAN_MODE_L2: 681 return ipvlan_handle_mode_l2(pskb, port); 682 case IPVLAN_MODE_L3: 683 return ipvlan_handle_mode_l3(pskb, port); 684 case IPVLAN_MODE_L3S: 685 return RX_HANDLER_PASS; 686 } 687 688 /* Should not reach here */ 689 WARN_ONCE(true, "ipvlan_handle_frame() called for mode = [%hx]\n", 690 port->mode); 691 kfree_skb(skb); 692 return RX_HANDLER_CONSUMED; 693 } 694 695 static struct ipvl_addr *ipvlan_skb_to_addr(struct sk_buff *skb, 696 struct net_device *dev) 697 { 698 struct ipvl_addr *addr = NULL; 699 struct ipvl_port *port; 700 void *lyr3h; 701 int addr_type; 702 703 if (!dev || !netif_is_ipvlan_port(dev)) 704 goto out; 705 706 port = ipvlan_port_get_rcu(dev); 707 if (!port || port->mode != IPVLAN_MODE_L3S) 708 goto out; 709 710 lyr3h = ipvlan_get_L3_hdr(skb, &addr_type); 711 if (!lyr3h) 712 goto out; 713 714 addr = ipvlan_addr_lookup(port, lyr3h, addr_type, true); 715 out: 716 return addr; 717 } 718 719 struct sk_buff *ipvlan_l3_rcv(struct net_device *dev, struct sk_buff *skb, 720 u16 proto) 721 { 722 struct ipvl_addr *addr; 723 struct net_device *sdev; 724 725 addr = ipvlan_skb_to_addr(skb, dev); 726 if (!addr) 727 goto out; 728 729 sdev = addr->master->dev; 730 switch (proto) { 731 case AF_INET: 732 { 733 int err; 734 struct iphdr *ip4h = ip_hdr(skb); 735 736 err = ip_route_input_noref(skb, ip4h->daddr, ip4h->saddr, 737 ip4h->tos, sdev); 738 if (unlikely(err)) 739 goto out; 740 break; 741 } 742 case AF_INET6: 743 { 744 struct dst_entry *dst; 745 struct ipv6hdr *ip6h = ipv6_hdr(skb); 746 int flags = RT6_LOOKUP_F_HAS_SADDR; 747 struct flowi6 fl6 = { 748 .flowi6_iif = sdev->ifindex, 749 .daddr = ip6h->daddr, 750 .saddr = ip6h->saddr, 751 .flowlabel = ip6_flowinfo(ip6h), 752 .flowi6_mark = skb->mark, 753 .flowi6_proto = ip6h->nexthdr, 754 }; 755 756 skb_dst_drop(skb); 757 dst = ip6_route_input_lookup(dev_net(sdev), sdev, &fl6, flags); 758 skb_dst_set(skb, dst); 759 break; 760 } 761 default: 762 break; 763 } 764 765 out: 766 return skb; 767 } 768 769 unsigned int ipvlan_nf_input(void *priv, struct sk_buff *skb, 770 const struct nf_hook_state *state) 771 { 772 struct ipvl_addr *addr; 773 unsigned int len; 774 775 addr = ipvlan_skb_to_addr(skb, skb->dev); 776 if (!addr) 777 goto out; 778 779 skb->dev = addr->master->dev; 780 len = skb->len + ETH_HLEN; 781 ipvlan_count_rx(addr->master, len, true, false); 782 out: 783 return NF_ACCEPT; 784 } 785