1/* linux/net/ipv4/arp.c 2 * 3 * Copyright (C) 1994 by Florian La Roche 4 * 5 * This module implements the Address Resolution Protocol ARP (RFC 826), 6 * which is used to convert IP addresses (or in the future maybe other 7 * high-level addresses) into a low-level hardware address (like an Ethernet 8 * address). 9 * 10 * This program is free software; you can redistribute it and/or 11 * modify it under the terms of the GNU General Public License 12 * as published by the Free Software Foundation; either version 13 * 2 of the License, or (at your option) any later version. 14 * 15 * Fixes: 16 * Alan Cox : Removed the Ethernet assumptions in 17 * Florian's code 18 * Alan Cox : Fixed some small errors in the ARP 19 * logic 20 * Alan Cox : Allow >4K in /proc 21 * Alan Cox : Make ARP add its own protocol entry 22 * Ross Martin : Rewrote arp_rcv() and arp_get_info() 23 * Stephen Henson : Add AX25 support to arp_get_info() 24 * Alan Cox : Drop data when a device is downed. 25 * Alan Cox : Use init_timer(). 26 * Alan Cox : Double lock fixes. 27 * Martin Seine : Move the arphdr structure 28 * to if_arp.h for compatibility. 29 * with BSD based programs. 30 * Andrew Tridgell : Added ARP netmask code and 31 * re-arranged proxy handling. 32 * Alan Cox : Changed to use notifiers. 33 * Niibe Yutaka : Reply for this device or proxies only. 34 * Alan Cox : Don't proxy across hardware types! 35 * Jonathan Naylor : Added support for NET/ROM. 36 * Mike Shaver : RFC1122 checks. 37 * Jonathan Naylor : Only lookup the hardware address for 38 * the correct hardware type. 39 * Germano Caronni : Assorted subtle races. 40 * Craig Schlenter : Don't modify permanent entry 41 * during arp_rcv. 42 * Russ Nelson : Tidied up a few bits. 43 * Alexey Kuznetsov: Major changes to caching and behaviour, 44 * eg intelligent arp probing and 45 * generation 46 * of host down events. 47 * Alan Cox : Missing unlock in device events. 48 * Eckes : ARP ioctl control errors. 49 * Alexey Kuznetsov: Arp free fix. 50 * Manuel Rodriguez: Gratuitous ARP. 51 * Jonathan Layes : Added arpd support through kerneld 52 * message queue (960314) 53 * Mike Shaver : /proc/sys/net/ipv4/arp_* support 54 * Mike McLagan : Routing by source 55 * Stuart Cheshire : Metricom and grat arp fixes 56 * *** FOR 2.1 clean this up *** 57 * Lawrence V. Stefani: (08/12/96) Added FDDI support. 58 * Alan Cox : Took the AP1000 nasty FDDI hack and 59 * folded into the mainstream FDDI code. 60 * Ack spit, Linus how did you allow that 61 * one in... 62 * Jes Sorensen : Make FDDI work again in 2.1.x and 63 * clean up the APFDDI & gen. FDDI bits. 64 * Alexey Kuznetsov: new arp state machine; 65 * now it is in net/core/neighbour.c. 66 * Krzysztof Halasa: Added Frame Relay ARP support. 67 * Arnaldo C. Melo : convert /proc/net/arp to seq_file 68 * Shmulik Hen: Split arp_send to arp_create and 69 * arp_xmit so intermediate drivers like 70 * bonding can change the skb before 71 * sending (e.g. insert 8021q tag). 72 * Harald Welte : convert to make use of jenkins hash 73 * Jesper D. Brouer: Proxy ARP PVLAN RFC 3069 support. 74 */ 75 76#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 77 78#include <linux/module.h> 79#include <linux/types.h> 80#include <linux/string.h> 81#include <linux/kernel.h> 82#include <linux/capability.h> 83#include <linux/socket.h> 84#include <linux/sockios.h> 85#include <linux/errno.h> 86#include <linux/in.h> 87#include <linux/mm.h> 88#include <linux/inet.h> 89#include <linux/inetdevice.h> 90#include <linux/netdevice.h> 91#include <linux/etherdevice.h> 92#include <linux/fddidevice.h> 93#include <linux/if_arp.h> 94#include <linux/skbuff.h> 95#include <linux/proc_fs.h> 96#include <linux/seq_file.h> 97#include <linux/stat.h> 98#include <linux/init.h> 99#include <linux/net.h> 100#include <linux/rcupdate.h> 101#include <linux/slab.h> 102#ifdef CONFIG_SYSCTL 103#include <linux/sysctl.h> 104#endif 105 106#include <net/net_namespace.h> 107#include <net/ip.h> 108#include <net/icmp.h> 109#include <net/route.h> 110#include <net/protocol.h> 111#include <net/tcp.h> 112#include <net/sock.h> 113#include <net/arp.h> 114#include <net/ax25.h> 115#include <net/netrom.h> 116 117#include <linux/uaccess.h> 118 119#include <linux/netfilter_arp.h> 120 121/* 122 * Interface to generic neighbour cache. 123 */ 124static u32 arp_hash(const void *pkey, const struct net_device *dev, __u32 *hash_rnd); 125static bool arp_key_eq(const struct neighbour *n, const void *pkey); 126static int arp_constructor(struct neighbour *neigh); 127static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb); 128static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb); 129static void parp_redo(struct sk_buff *skb); 130 131static const struct neigh_ops arp_generic_ops = { 132 .family = AF_INET, 133 .solicit = arp_solicit, 134 .error_report = arp_error_report, 135 .output = neigh_resolve_output, 136 .connected_output = neigh_connected_output, 137}; 138 139static const struct neigh_ops arp_hh_ops = { 140 .family = AF_INET, 141 .solicit = arp_solicit, 142 .error_report = arp_error_report, 143 .output = neigh_resolve_output, 144 .connected_output = neigh_resolve_output, 145}; 146 147static const struct neigh_ops arp_direct_ops = { 148 .family = AF_INET, 149 .output = neigh_direct_output, 150 .connected_output = neigh_direct_output, 151}; 152 153struct neigh_table arp_tbl = { 154 .family = AF_INET, 155 .key_len = 4, 156 .protocol = cpu_to_be16(ETH_P_IP), 157 .hash = arp_hash, 158 .key_eq = arp_key_eq, 159 .constructor = arp_constructor, 160 .proxy_redo = parp_redo, 161 .id = "arp_cache", 162 .parms = { 163 .tbl = &arp_tbl, 164 .reachable_time = 30 * HZ, 165 .data = { 166 [NEIGH_VAR_MCAST_PROBES] = 3, 167 [NEIGH_VAR_UCAST_PROBES] = 3, 168 [NEIGH_VAR_RETRANS_TIME] = 1 * HZ, 169 [NEIGH_VAR_BASE_REACHABLE_TIME] = 30 * HZ, 170 [NEIGH_VAR_DELAY_PROBE_TIME] = 5 * HZ, 171 [NEIGH_VAR_GC_STALETIME] = 60 * HZ, 172 [NEIGH_VAR_QUEUE_LEN_BYTES] = 64 * 1024, 173 [NEIGH_VAR_PROXY_QLEN] = 64, 174 [NEIGH_VAR_ANYCAST_DELAY] = 1 * HZ, 175 [NEIGH_VAR_PROXY_DELAY] = (8 * HZ) / 10, 176 [NEIGH_VAR_LOCKTIME] = 1 * HZ, 177 }, 178 }, 179 .gc_interval = 30 * HZ, 180 .gc_thresh1 = 128, 181 .gc_thresh2 = 512, 182 .gc_thresh3 = 1024, 183}; 184EXPORT_SYMBOL(arp_tbl); 185 186int arp_mc_map(__be32 addr, u8 *haddr, struct net_device *dev, int dir) 187{ 188 switch (dev->type) { 189 case ARPHRD_ETHER: 190 case ARPHRD_FDDI: 191 case ARPHRD_IEEE802: 192 ip_eth_mc_map(addr, haddr); 193 return 0; 194 case ARPHRD_INFINIBAND: 195 ip_ib_mc_map(addr, dev->broadcast, haddr); 196 return 0; 197 case ARPHRD_IPGRE: 198 ip_ipgre_mc_map(addr, dev->broadcast, haddr); 199 return 0; 200 default: 201 if (dir) { 202 memcpy(haddr, dev->broadcast, dev->addr_len); 203 return 0; 204 } 205 } 206 return -EINVAL; 207} 208 209 210static u32 arp_hash(const void *pkey, 211 const struct net_device *dev, 212 __u32 *hash_rnd) 213{ 214 return arp_hashfn(pkey, dev, hash_rnd); 215} 216 217static bool arp_key_eq(const struct neighbour *neigh, const void *pkey) 218{ 219 return neigh_key_eq32(neigh, pkey); 220} 221 222static int arp_constructor(struct neighbour *neigh) 223{ 224 __be32 addr = *(__be32 *)neigh->primary_key; 225 struct net_device *dev = neigh->dev; 226 struct in_device *in_dev; 227 struct neigh_parms *parms; 228 229 rcu_read_lock(); 230 in_dev = __in_dev_get_rcu(dev); 231 if (!in_dev) { 232 rcu_read_unlock(); 233 return -EINVAL; 234 } 235 236 neigh->type = inet_addr_type(dev_net(dev), addr); 237 238 parms = in_dev->arp_parms; 239 __neigh_parms_put(neigh->parms); 240 neigh->parms = neigh_parms_clone(parms); 241 rcu_read_unlock(); 242 243 if (!dev->header_ops) { 244 neigh->nud_state = NUD_NOARP; 245 neigh->ops = &arp_direct_ops; 246 neigh->output = neigh_direct_output; 247 } else { 248 /* Good devices (checked by reading texts, but only Ethernet is 249 tested) 250 251 ARPHRD_ETHER: (ethernet, apfddi) 252 ARPHRD_FDDI: (fddi) 253 ARPHRD_IEEE802: (tr) 254 ARPHRD_METRICOM: (strip) 255 ARPHRD_ARCNET: 256 etc. etc. etc. 257 258 ARPHRD_IPDDP will also work, if author repairs it. 259 I did not it, because this driver does not work even 260 in old paradigm. 261 */ 262 263 if (neigh->type == RTN_MULTICAST) { 264 neigh->nud_state = NUD_NOARP; 265 arp_mc_map(addr, neigh->ha, dev, 1); 266 } else if (dev->flags & (IFF_NOARP | IFF_LOOPBACK)) { 267 neigh->nud_state = NUD_NOARP; 268 memcpy(neigh->ha, dev->dev_addr, dev->addr_len); 269 } else if (neigh->type == RTN_BROADCAST || 270 (dev->flags & IFF_POINTOPOINT)) { 271 neigh->nud_state = NUD_NOARP; 272 memcpy(neigh->ha, dev->broadcast, dev->addr_len); 273 } 274 275 if (dev->header_ops->cache) 276 neigh->ops = &arp_hh_ops; 277 else 278 neigh->ops = &arp_generic_ops; 279 280 if (neigh->nud_state & NUD_VALID) 281 neigh->output = neigh->ops->connected_output; 282 else 283 neigh->output = neigh->ops->output; 284 } 285 return 0; 286} 287 288static void arp_error_report(struct neighbour *neigh, struct sk_buff *skb) 289{ 290 dst_link_failure(skb); 291 kfree_skb(skb); 292} 293 294static void arp_solicit(struct neighbour *neigh, struct sk_buff *skb) 295{ 296 __be32 saddr = 0; 297 u8 dst_ha[MAX_ADDR_LEN], *dst_hw = NULL; 298 struct net_device *dev = neigh->dev; 299 __be32 target = *(__be32 *)neigh->primary_key; 300 int probes = atomic_read(&neigh->probes); 301 struct in_device *in_dev; 302 303 rcu_read_lock(); 304 in_dev = __in_dev_get_rcu(dev); 305 if (!in_dev) { 306 rcu_read_unlock(); 307 return; 308 } 309 switch (IN_DEV_ARP_ANNOUNCE(in_dev)) { 310 default: 311 case 0: /* By default announce any local IP */ 312 if (skb && inet_addr_type(dev_net(dev), 313 ip_hdr(skb)->saddr) == RTN_LOCAL) 314 saddr = ip_hdr(skb)->saddr; 315 break; 316 case 1: /* Restrict announcements of saddr in same subnet */ 317 if (!skb) 318 break; 319 saddr = ip_hdr(skb)->saddr; 320 if (inet_addr_type(dev_net(dev), saddr) == RTN_LOCAL) { 321 /* saddr should be known to target */ 322 if (inet_addr_onlink(in_dev, target, saddr)) 323 break; 324 } 325 saddr = 0; 326 break; 327 case 2: /* Avoid secondary IPs, get a primary/preferred one */ 328 break; 329 } 330 rcu_read_unlock(); 331 332 if (!saddr) 333 saddr = inet_select_addr(dev, target, RT_SCOPE_LINK); 334 335 probes -= NEIGH_VAR(neigh->parms, UCAST_PROBES); 336 if (probes < 0) { 337 if (!(neigh->nud_state & NUD_VALID)) 338 pr_debug("trying to ucast probe in NUD_INVALID\n"); 339 neigh_ha_snapshot(dst_ha, neigh, dev); 340 dst_hw = dst_ha; 341 } else { 342 probes -= NEIGH_VAR(neigh->parms, APP_PROBES); 343 if (probes < 0) { 344 neigh_app_ns(neigh); 345 return; 346 } 347 } 348 349 arp_send(ARPOP_REQUEST, ETH_P_ARP, target, dev, saddr, 350 dst_hw, dev->dev_addr, NULL); 351} 352 353static int arp_ignore(struct in_device *in_dev, __be32 sip, __be32 tip) 354{ 355 struct net *net = dev_net(in_dev->dev); 356 int scope; 357 358 switch (IN_DEV_ARP_IGNORE(in_dev)) { 359 case 0: /* Reply, the tip is already validated */ 360 return 0; 361 case 1: /* Reply only if tip is configured on the incoming interface */ 362 sip = 0; 363 scope = RT_SCOPE_HOST; 364 break; 365 case 2: /* 366 * Reply only if tip is configured on the incoming interface 367 * and is in same subnet as sip 368 */ 369 scope = RT_SCOPE_HOST; 370 break; 371 case 3: /* Do not reply for scope host addresses */ 372 sip = 0; 373 scope = RT_SCOPE_LINK; 374 in_dev = NULL; 375 break; 376 case 4: /* Reserved */ 377 case 5: 378 case 6: 379 case 7: 380 return 0; 381 case 8: /* Do not reply */ 382 return 1; 383 default: 384 return 0; 385 } 386 return !inet_confirm_addr(net, in_dev, sip, tip, scope); 387} 388 389static int arp_filter(__be32 sip, __be32 tip, struct net_device *dev) 390{ 391 struct rtable *rt; 392 int flag = 0; 393 /*unsigned long now; */ 394 struct net *net = dev_net(dev); 395 396 rt = ip_route_output(net, sip, tip, 0, 0); 397 if (IS_ERR(rt)) 398 return 1; 399 if (rt->dst.dev != dev) { 400 NET_INC_STATS_BH(net, LINUX_MIB_ARPFILTER); 401 flag = 1; 402 } 403 ip_rt_put(rt); 404 return flag; 405} 406 407/* 408 * Check if we can use proxy ARP for this path 409 */ 410static inline int arp_fwd_proxy(struct in_device *in_dev, 411 struct net_device *dev, struct rtable *rt) 412{ 413 struct in_device *out_dev; 414 int imi, omi = -1; 415 416 if (rt->dst.dev == dev) 417 return 0; 418 419 if (!IN_DEV_PROXY_ARP(in_dev)) 420 return 0; 421 imi = IN_DEV_MEDIUM_ID(in_dev); 422 if (imi == 0) 423 return 1; 424 if (imi == -1) 425 return 0; 426 427 /* place to check for proxy_arp for routes */ 428 429 out_dev = __in_dev_get_rcu(rt->dst.dev); 430 if (out_dev) 431 omi = IN_DEV_MEDIUM_ID(out_dev); 432 433 return omi != imi && omi != -1; 434} 435 436/* 437 * Check for RFC3069 proxy arp private VLAN (allow to send back to same dev) 438 * 439 * RFC3069 supports proxy arp replies back to the same interface. This 440 * is done to support (ethernet) switch features, like RFC 3069, where 441 * the individual ports are not allowed to communicate with each 442 * other, BUT they are allowed to talk to the upstream router. As 443 * described in RFC 3069, it is possible to allow these hosts to 444 * communicate through the upstream router, by proxy_arp'ing. 445 * 446 * RFC 3069: "VLAN Aggregation for Efficient IP Address Allocation" 447 * 448 * This technology is known by different names: 449 * In RFC 3069 it is called VLAN Aggregation. 450 * Cisco and Allied Telesyn call it Private VLAN. 451 * Hewlett-Packard call it Source-Port filtering or port-isolation. 452 * Ericsson call it MAC-Forced Forwarding (RFC Draft). 453 * 454 */ 455static inline int arp_fwd_pvlan(struct in_device *in_dev, 456 struct net_device *dev, struct rtable *rt, 457 __be32 sip, __be32 tip) 458{ 459 /* Private VLAN is only concerned about the same ethernet segment */ 460 if (rt->dst.dev != dev) 461 return 0; 462 463 /* Don't reply on self probes (often done by windowz boxes)*/ 464 if (sip == tip) 465 return 0; 466 467 if (IN_DEV_PROXY_ARP_PVLAN(in_dev)) 468 return 1; 469 else 470 return 0; 471} 472 473/* 474 * Interface to link layer: send routine and receive handler. 475 */ 476 477/* 478 * Create an arp packet. If dest_hw is not set, we create a broadcast 479 * message. 480 */ 481struct sk_buff *arp_create(int type, int ptype, __be32 dest_ip, 482 struct net_device *dev, __be32 src_ip, 483 const unsigned char *dest_hw, 484 const unsigned char *src_hw, 485 const unsigned char *target_hw) 486{ 487 struct sk_buff *skb; 488 struct arphdr *arp; 489 unsigned char *arp_ptr; 490 int hlen = LL_RESERVED_SPACE(dev); 491 int tlen = dev->needed_tailroom; 492 493 /* 494 * Allocate a buffer 495 */ 496 497 skb = alloc_skb(arp_hdr_len(dev) + hlen + tlen, GFP_ATOMIC); 498 if (!skb) 499 return NULL; 500 501 skb_reserve(skb, hlen); 502 skb_reset_network_header(skb); 503 arp = (struct arphdr *) skb_put(skb, arp_hdr_len(dev)); 504 skb->dev = dev; 505 skb->protocol = htons(ETH_P_ARP); 506 if (!src_hw) 507 src_hw = dev->dev_addr; 508 if (!dest_hw) 509 dest_hw = dev->broadcast; 510 511 /* 512 * Fill the device header for the ARP frame 513 */ 514 if (dev_hard_header(skb, dev, ptype, dest_hw, src_hw, skb->len) < 0) 515 goto out; 516 517 /* 518 * Fill out the arp protocol part. 519 * 520 * The arp hardware type should match the device type, except for FDDI, 521 * which (according to RFC 1390) should always equal 1 (Ethernet). 522 */ 523 /* 524 * Exceptions everywhere. AX.25 uses the AX.25 PID value not the 525 * DIX code for the protocol. Make these device structure fields. 526 */ 527 switch (dev->type) { 528 default: 529 arp->ar_hrd = htons(dev->type); 530 arp->ar_pro = htons(ETH_P_IP); 531 break; 532 533#if IS_ENABLED(CONFIG_AX25) 534 case ARPHRD_AX25: 535 arp->ar_hrd = htons(ARPHRD_AX25); 536 arp->ar_pro = htons(AX25_P_IP); 537 break; 538 539#if IS_ENABLED(CONFIG_NETROM) 540 case ARPHRD_NETROM: 541 arp->ar_hrd = htons(ARPHRD_NETROM); 542 arp->ar_pro = htons(AX25_P_IP); 543 break; 544#endif 545#endif 546 547#if IS_ENABLED(CONFIG_FDDI) 548 case ARPHRD_FDDI: 549 arp->ar_hrd = htons(ARPHRD_ETHER); 550 arp->ar_pro = htons(ETH_P_IP); 551 break; 552#endif 553 } 554 555 arp->ar_hln = dev->addr_len; 556 arp->ar_pln = 4; 557 arp->ar_op = htons(type); 558 559 arp_ptr = (unsigned char *)(arp + 1); 560 561 memcpy(arp_ptr, src_hw, dev->addr_len); 562 arp_ptr += dev->addr_len; 563 memcpy(arp_ptr, &src_ip, 4); 564 arp_ptr += 4; 565 566 switch (dev->type) { 567#if IS_ENABLED(CONFIG_FIREWIRE_NET) 568 case ARPHRD_IEEE1394: 569 break; 570#endif 571 default: 572 if (target_hw) 573 memcpy(arp_ptr, target_hw, dev->addr_len); 574 else 575 memset(arp_ptr, 0, dev->addr_len); 576 arp_ptr += dev->addr_len; 577 } 578 memcpy(arp_ptr, &dest_ip, 4); 579 580 return skb; 581 582out: 583 kfree_skb(skb); 584 return NULL; 585} 586EXPORT_SYMBOL(arp_create); 587 588/* 589 * Send an arp packet. 590 */ 591void arp_xmit(struct sk_buff *skb) 592{ 593 /* Send it off, maybe filter it using firewalling first. */ 594 NF_HOOK(NFPROTO_ARP, NF_ARP_OUT, NULL, skb, 595 NULL, skb->dev, dev_queue_xmit_sk); 596} 597EXPORT_SYMBOL(arp_xmit); 598 599/* 600 * Create and send an arp packet. 601 */ 602void arp_send(int type, int ptype, __be32 dest_ip, 603 struct net_device *dev, __be32 src_ip, 604 const unsigned char *dest_hw, const unsigned char *src_hw, 605 const unsigned char *target_hw) 606{ 607 struct sk_buff *skb; 608 609 /* 610 * No arp on this interface. 611 */ 612 613 if (dev->flags&IFF_NOARP) 614 return; 615 616 skb = arp_create(type, ptype, dest_ip, dev, src_ip, 617 dest_hw, src_hw, target_hw); 618 if (!skb) 619 return; 620 621 arp_xmit(skb); 622} 623EXPORT_SYMBOL(arp_send); 624 625/* 626 * Process an arp request. 627 */ 628 629static int arp_process(struct sock *sk, struct sk_buff *skb) 630{ 631 struct net_device *dev = skb->dev; 632 struct in_device *in_dev = __in_dev_get_rcu(dev); 633 struct arphdr *arp; 634 unsigned char *arp_ptr; 635 struct rtable *rt; 636 unsigned char *sha; 637 __be32 sip, tip; 638 u16 dev_type = dev->type; 639 int addr_type; 640 struct neighbour *n; 641 struct net *net = dev_net(dev); 642 bool is_garp = false; 643 644 /* arp_rcv below verifies the ARP header and verifies the device 645 * is ARP'able. 646 */ 647 648 if (!in_dev) 649 goto out; 650 651 arp = arp_hdr(skb); 652 653 switch (dev_type) { 654 default: 655 if (arp->ar_pro != htons(ETH_P_IP) || 656 htons(dev_type) != arp->ar_hrd) 657 goto out; 658 break; 659 case ARPHRD_ETHER: 660 case ARPHRD_FDDI: 661 case ARPHRD_IEEE802: 662 /* 663 * ETHERNET, and Fibre Channel (which are IEEE 802 664 * devices, according to RFC 2625) devices will accept ARP 665 * hardware types of either 1 (Ethernet) or 6 (IEEE 802.2). 666 * This is the case also of FDDI, where the RFC 1390 says that 667 * FDDI devices should accept ARP hardware of (1) Ethernet, 668 * however, to be more robust, we'll accept both 1 (Ethernet) 669 * or 6 (IEEE 802.2) 670 */ 671 if ((arp->ar_hrd != htons(ARPHRD_ETHER) && 672 arp->ar_hrd != htons(ARPHRD_IEEE802)) || 673 arp->ar_pro != htons(ETH_P_IP)) 674 goto out; 675 break; 676 case ARPHRD_AX25: 677 if (arp->ar_pro != htons(AX25_P_IP) || 678 arp->ar_hrd != htons(ARPHRD_AX25)) 679 goto out; 680 break; 681 case ARPHRD_NETROM: 682 if (arp->ar_pro != htons(AX25_P_IP) || 683 arp->ar_hrd != htons(ARPHRD_NETROM)) 684 goto out; 685 break; 686 } 687 688 /* Understand only these message types */ 689 690 if (arp->ar_op != htons(ARPOP_REPLY) && 691 arp->ar_op != htons(ARPOP_REQUEST)) 692 goto out; 693 694/* 695 * Extract fields 696 */ 697 arp_ptr = (unsigned char *)(arp + 1); 698 sha = arp_ptr; 699 arp_ptr += dev->addr_len; 700 memcpy(&sip, arp_ptr, 4); 701 arp_ptr += 4; 702 switch (dev_type) { 703#if IS_ENABLED(CONFIG_FIREWIRE_NET) 704 case ARPHRD_IEEE1394: 705 break; 706#endif 707 default: 708 arp_ptr += dev->addr_len; 709 } 710 memcpy(&tip, arp_ptr, 4); 711/* 712 * Check for bad requests for 127.x.x.x and requests for multicast 713 * addresses. If this is one such, delete it. 714 */ 715 if (ipv4_is_multicast(tip) || 716 (!IN_DEV_ROUTE_LOCALNET(in_dev) && ipv4_is_loopback(tip))) 717 goto out; 718 719/* 720 * Special case: We must set Frame Relay source Q.922 address 721 */ 722 if (dev_type == ARPHRD_DLCI) 723 sha = dev->broadcast; 724 725/* 726 * Process entry. The idea here is we want to send a reply if it is a 727 * request for us or if it is a request for someone else that we hold 728 * a proxy for. We want to add an entry to our cache if it is a reply 729 * to us or if it is a request for our address. 730 * (The assumption for this last is that if someone is requesting our 731 * address, they are probably intending to talk to us, so it saves time 732 * if we cache their address. Their address is also probably not in 733 * our cache, since ours is not in their cache.) 734 * 735 * Putting this another way, we only care about replies if they are to 736 * us, in which case we add them to the cache. For requests, we care 737 * about those for us and those for our proxies. We reply to both, 738 * and in the case of requests for us we add the requester to the arp 739 * cache. 740 */ 741 742 /* Special case: IPv4 duplicate address detection packet (RFC2131) */ 743 if (sip == 0) { 744 if (arp->ar_op == htons(ARPOP_REQUEST) && 745 inet_addr_type(net, tip) == RTN_LOCAL && 746 !arp_ignore(in_dev, sip, tip)) 747 arp_send(ARPOP_REPLY, ETH_P_ARP, sip, dev, tip, sha, 748 dev->dev_addr, sha); 749 goto out; 750 } 751 752 if (arp->ar_op == htons(ARPOP_REQUEST) && 753 ip_route_input_noref(skb, tip, sip, 0, dev) == 0) { 754 755 rt = skb_rtable(skb); 756 addr_type = rt->rt_type; 757 758 if (addr_type == RTN_LOCAL) { 759 int dont_send; 760 761 dont_send = arp_ignore(in_dev, sip, tip); 762 if (!dont_send && IN_DEV_ARPFILTER(in_dev)) 763 dont_send = arp_filter(sip, tip, dev); 764 if (!dont_send) { 765 n = neigh_event_ns(&arp_tbl, sha, &sip, dev); 766 if (n) { 767 arp_send(ARPOP_REPLY, ETH_P_ARP, sip, 768 dev, tip, sha, dev->dev_addr, 769 sha); 770 neigh_release(n); 771 } 772 } 773 goto out; 774 } else if (IN_DEV_FORWARD(in_dev)) { 775 if (addr_type == RTN_UNICAST && 776 (arp_fwd_proxy(in_dev, dev, rt) || 777 arp_fwd_pvlan(in_dev, dev, rt, sip, tip) || 778 (rt->dst.dev != dev && 779 pneigh_lookup(&arp_tbl, net, &tip, dev, 0)))) { 780 n = neigh_event_ns(&arp_tbl, sha, &sip, dev); 781 if (n) 782 neigh_release(n); 783 784 if (NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED || 785 skb->pkt_type == PACKET_HOST || 786 NEIGH_VAR(in_dev->arp_parms, PROXY_DELAY) == 0) { 787 arp_send(ARPOP_REPLY, ETH_P_ARP, sip, 788 dev, tip, sha, dev->dev_addr, 789 sha); 790 } else { 791 pneigh_enqueue(&arp_tbl, 792 in_dev->arp_parms, skb); 793 return 0; 794 } 795 goto out; 796 } 797 } 798 } 799 800 /* Update our ARP tables */ 801 802 n = __neigh_lookup(&arp_tbl, &sip, dev, 0); 803 804 if (IN_DEV_ARP_ACCEPT(in_dev)) { 805 /* Unsolicited ARP is not accepted by default. 806 It is possible, that this option should be enabled for some 807 devices (strip is candidate) 808 */ 809 is_garp = arp->ar_op == htons(ARPOP_REQUEST) && tip == sip && 810 inet_addr_type(net, sip) == RTN_UNICAST; 811 812 if (!n && 813 ((arp->ar_op == htons(ARPOP_REPLY) && 814 inet_addr_type(net, sip) == RTN_UNICAST) || is_garp)) 815 n = __neigh_lookup(&arp_tbl, &sip, dev, 1); 816 } 817 818 if (n) { 819 int state = NUD_REACHABLE; 820 int override; 821 822 /* If several different ARP replies follows back-to-back, 823 use the FIRST one. It is possible, if several proxy 824 agents are active. Taking the first reply prevents 825 arp trashing and chooses the fastest router. 826 */ 827 override = time_after(jiffies, 828 n->updated + 829 NEIGH_VAR(n->parms, LOCKTIME)) || 830 is_garp; 831 832 /* Broadcast replies and request packets 833 do not assert neighbour reachability. 834 */ 835 if (arp->ar_op != htons(ARPOP_REPLY) || 836 skb->pkt_type != PACKET_HOST) 837 state = NUD_STALE; 838 neigh_update(n, sha, state, 839 override ? NEIGH_UPDATE_F_OVERRIDE : 0); 840 neigh_release(n); 841 } 842 843out: 844 consume_skb(skb); 845 return 0; 846} 847 848static void parp_redo(struct sk_buff *skb) 849{ 850 arp_process(NULL, skb); 851} 852 853 854/* 855 * Receive an arp request from the device layer. 856 */ 857 858static int arp_rcv(struct sk_buff *skb, struct net_device *dev, 859 struct packet_type *pt, struct net_device *orig_dev) 860{ 861 const struct arphdr *arp; 862 863 /* do not tweak dropwatch on an ARP we will ignore */ 864 if (dev->flags & IFF_NOARP || 865 skb->pkt_type == PACKET_OTHERHOST || 866 skb->pkt_type == PACKET_LOOPBACK) 867 goto consumeskb; 868 869 skb = skb_share_check(skb, GFP_ATOMIC); 870 if (!skb) 871 goto out_of_mem; 872 873 /* ARP header, plus 2 device addresses, plus 2 IP addresses. */ 874 if (!pskb_may_pull(skb, arp_hdr_len(dev))) 875 goto freeskb; 876 877 arp = arp_hdr(skb); 878 if (arp->ar_hln != dev->addr_len || arp->ar_pln != 4) 879 goto freeskb; 880 881 memset(NEIGH_CB(skb), 0, sizeof(struct neighbour_cb)); 882 883 return NF_HOOK(NFPROTO_ARP, NF_ARP_IN, NULL, skb, 884 dev, NULL, arp_process); 885 886consumeskb: 887 consume_skb(skb); 888 return 0; 889freeskb: 890 kfree_skb(skb); 891out_of_mem: 892 return 0; 893} 894 895/* 896 * User level interface (ioctl) 897 */ 898 899/* 900 * Set (create) an ARP cache entry. 901 */ 902 903static int arp_req_set_proxy(struct net *net, struct net_device *dev, int on) 904{ 905 if (!dev) { 906 IPV4_DEVCONF_ALL(net, PROXY_ARP) = on; 907 return 0; 908 } 909 if (__in_dev_get_rtnl(dev)) { 910 IN_DEV_CONF_SET(__in_dev_get_rtnl(dev), PROXY_ARP, on); 911 return 0; 912 } 913 return -ENXIO; 914} 915 916static int arp_req_set_public(struct net *net, struct arpreq *r, 917 struct net_device *dev) 918{ 919 __be32 ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr; 920 __be32 mask = ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr; 921 922 if (mask && mask != htonl(0xFFFFFFFF)) 923 return -EINVAL; 924 if (!dev && (r->arp_flags & ATF_COM)) { 925 dev = dev_getbyhwaddr_rcu(net, r->arp_ha.sa_family, 926 r->arp_ha.sa_data); 927 if (!dev) 928 return -ENODEV; 929 } 930 if (mask) { 931 if (!pneigh_lookup(&arp_tbl, net, &ip, dev, 1)) 932 return -ENOBUFS; 933 return 0; 934 } 935 936 return arp_req_set_proxy(net, dev, 1); 937} 938 939static int arp_req_set(struct net *net, struct arpreq *r, 940 struct net_device *dev) 941{ 942 __be32 ip; 943 struct neighbour *neigh; 944 int err; 945 946 if (r->arp_flags & ATF_PUBL) 947 return arp_req_set_public(net, r, dev); 948 949 ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr; 950 if (r->arp_flags & ATF_PERM) 951 r->arp_flags |= ATF_COM; 952 if (!dev) { 953 struct rtable *rt = ip_route_output(net, ip, 0, RTO_ONLINK, 0); 954 955 if (IS_ERR(rt)) 956 return PTR_ERR(rt); 957 dev = rt->dst.dev; 958 ip_rt_put(rt); 959 if (!dev) 960 return -EINVAL; 961 } 962 switch (dev->type) { 963#if IS_ENABLED(CONFIG_FDDI) 964 case ARPHRD_FDDI: 965 /* 966 * According to RFC 1390, FDDI devices should accept ARP 967 * hardware types of 1 (Ethernet). However, to be more 968 * robust, we'll accept hardware types of either 1 (Ethernet) 969 * or 6 (IEEE 802.2). 970 */ 971 if (r->arp_ha.sa_family != ARPHRD_FDDI && 972 r->arp_ha.sa_family != ARPHRD_ETHER && 973 r->arp_ha.sa_family != ARPHRD_IEEE802) 974 return -EINVAL; 975 break; 976#endif 977 default: 978 if (r->arp_ha.sa_family != dev->type) 979 return -EINVAL; 980 break; 981 } 982 983 neigh = __neigh_lookup_errno(&arp_tbl, &ip, dev); 984 err = PTR_ERR(neigh); 985 if (!IS_ERR(neigh)) { 986 unsigned int state = NUD_STALE; 987 if (r->arp_flags & ATF_PERM) 988 state = NUD_PERMANENT; 989 err = neigh_update(neigh, (r->arp_flags & ATF_COM) ? 990 r->arp_ha.sa_data : NULL, state, 991 NEIGH_UPDATE_F_OVERRIDE | 992 NEIGH_UPDATE_F_ADMIN); 993 neigh_release(neigh); 994 } 995 return err; 996} 997 998static unsigned int arp_state_to_flags(struct neighbour *neigh) 999{ 1000 if (neigh->nud_state&NUD_PERMANENT) 1001 return ATF_PERM | ATF_COM; 1002 else if (neigh->nud_state&NUD_VALID) 1003 return ATF_COM; 1004 else 1005 return 0; 1006} 1007 1008/* 1009 * Get an ARP cache entry. 1010 */ 1011 1012static int arp_req_get(struct arpreq *r, struct net_device *dev) 1013{ 1014 __be32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr; 1015 struct neighbour *neigh; 1016 int err = -ENXIO; 1017 1018 neigh = neigh_lookup(&arp_tbl, &ip, dev); 1019 if (neigh) { 1020 read_lock_bh(&neigh->lock); 1021 memcpy(r->arp_ha.sa_data, neigh->ha, dev->addr_len); 1022 r->arp_flags = arp_state_to_flags(neigh); 1023 read_unlock_bh(&neigh->lock); 1024 r->arp_ha.sa_family = dev->type; 1025 strlcpy(r->arp_dev, dev->name, sizeof(r->arp_dev)); 1026 neigh_release(neigh); 1027 err = 0; 1028 } 1029 return err; 1030} 1031 1032static int arp_invalidate(struct net_device *dev, __be32 ip) 1033{ 1034 struct neighbour *neigh = neigh_lookup(&arp_tbl, &ip, dev); 1035 int err = -ENXIO; 1036 1037 if (neigh) { 1038 if (neigh->nud_state & ~NUD_NOARP) 1039 err = neigh_update(neigh, NULL, NUD_FAILED, 1040 NEIGH_UPDATE_F_OVERRIDE| 1041 NEIGH_UPDATE_F_ADMIN); 1042 neigh_release(neigh); 1043 } 1044 1045 return err; 1046} 1047 1048static int arp_req_delete_public(struct net *net, struct arpreq *r, 1049 struct net_device *dev) 1050{ 1051 __be32 ip = ((struct sockaddr_in *) &r->arp_pa)->sin_addr.s_addr; 1052 __be32 mask = ((struct sockaddr_in *)&r->arp_netmask)->sin_addr.s_addr; 1053 1054 if (mask == htonl(0xFFFFFFFF)) 1055 return pneigh_delete(&arp_tbl, net, &ip, dev); 1056 1057 if (mask) 1058 return -EINVAL; 1059 1060 return arp_req_set_proxy(net, dev, 0); 1061} 1062 1063static int arp_req_delete(struct net *net, struct arpreq *r, 1064 struct net_device *dev) 1065{ 1066 __be32 ip; 1067 1068 if (r->arp_flags & ATF_PUBL) 1069 return arp_req_delete_public(net, r, dev); 1070 1071 ip = ((struct sockaddr_in *)&r->arp_pa)->sin_addr.s_addr; 1072 if (!dev) { 1073 struct rtable *rt = ip_route_output(net, ip, 0, RTO_ONLINK, 0); 1074 if (IS_ERR(rt)) 1075 return PTR_ERR(rt); 1076 dev = rt->dst.dev; 1077 ip_rt_put(rt); 1078 if (!dev) 1079 return -EINVAL; 1080 } 1081 return arp_invalidate(dev, ip); 1082} 1083 1084/* 1085 * Handle an ARP layer I/O control request. 1086 */ 1087 1088int arp_ioctl(struct net *net, unsigned int cmd, void __user *arg) 1089{ 1090 int err; 1091 struct arpreq r; 1092 struct net_device *dev = NULL; 1093 1094 switch (cmd) { 1095 case SIOCDARP: 1096 case SIOCSARP: 1097 if (!ns_capable(net->user_ns, CAP_NET_ADMIN)) 1098 return -EPERM; 1099 case SIOCGARP: 1100 err = copy_from_user(&r, arg, sizeof(struct arpreq)); 1101 if (err) 1102 return -EFAULT; 1103 break; 1104 default: 1105 return -EINVAL; 1106 } 1107 1108 if (r.arp_pa.sa_family != AF_INET) 1109 return -EPFNOSUPPORT; 1110 1111 if (!(r.arp_flags & ATF_PUBL) && 1112 (r.arp_flags & (ATF_NETMASK | ATF_DONTPUB))) 1113 return -EINVAL; 1114 if (!(r.arp_flags & ATF_NETMASK)) 1115 ((struct sockaddr_in *)&r.arp_netmask)->sin_addr.s_addr = 1116 htonl(0xFFFFFFFFUL); 1117 rtnl_lock(); 1118 if (r.arp_dev[0]) { 1119 err = -ENODEV; 1120 dev = __dev_get_by_name(net, r.arp_dev); 1121 if (!dev) 1122 goto out; 1123 1124 /* Mmmm... It is wrong... ARPHRD_NETROM==0 */ 1125 if (!r.arp_ha.sa_family) 1126 r.arp_ha.sa_family = dev->type; 1127 err = -EINVAL; 1128 if ((r.arp_flags & ATF_COM) && r.arp_ha.sa_family != dev->type) 1129 goto out; 1130 } else if (cmd == SIOCGARP) { 1131 err = -ENODEV; 1132 goto out; 1133 } 1134 1135 switch (cmd) { 1136 case SIOCDARP: 1137 err = arp_req_delete(net, &r, dev); 1138 break; 1139 case SIOCSARP: 1140 err = arp_req_set(net, &r, dev); 1141 break; 1142 case SIOCGARP: 1143 err = arp_req_get(&r, dev); 1144 break; 1145 } 1146out: 1147 rtnl_unlock(); 1148 if (cmd == SIOCGARP && !err && copy_to_user(arg, &r, sizeof(r))) 1149 err = -EFAULT; 1150 return err; 1151} 1152 1153static int arp_netdev_event(struct notifier_block *this, unsigned long event, 1154 void *ptr) 1155{ 1156 struct net_device *dev = netdev_notifier_info_to_dev(ptr); 1157 struct netdev_notifier_change_info *change_info; 1158 1159 switch (event) { 1160 case NETDEV_CHANGEADDR: 1161 neigh_changeaddr(&arp_tbl, dev); 1162 rt_cache_flush(dev_net(dev)); 1163 break; 1164 case NETDEV_CHANGE: 1165 change_info = ptr; 1166 if (change_info->flags_changed & IFF_NOARP) 1167 neigh_changeaddr(&arp_tbl, dev); 1168 break; 1169 default: 1170 break; 1171 } 1172 1173 return NOTIFY_DONE; 1174} 1175 1176static struct notifier_block arp_netdev_notifier = { 1177 .notifier_call = arp_netdev_event, 1178}; 1179 1180/* Note, that it is not on notifier chain. 1181 It is necessary, that this routine was called after route cache will be 1182 flushed. 1183 */ 1184void arp_ifdown(struct net_device *dev) 1185{ 1186 neigh_ifdown(&arp_tbl, dev); 1187} 1188 1189 1190/* 1191 * Called once on startup. 1192 */ 1193 1194static struct packet_type arp_packet_type __read_mostly = { 1195 .type = cpu_to_be16(ETH_P_ARP), 1196 .func = arp_rcv, 1197}; 1198 1199static int arp_proc_init(void); 1200 1201void __init arp_init(void) 1202{ 1203 neigh_table_init(NEIGH_ARP_TABLE, &arp_tbl); 1204 1205 dev_add_pack(&arp_packet_type); 1206 arp_proc_init(); 1207#ifdef CONFIG_SYSCTL 1208 neigh_sysctl_register(NULL, &arp_tbl.parms, NULL); 1209#endif 1210 register_netdevice_notifier(&arp_netdev_notifier); 1211} 1212 1213#ifdef CONFIG_PROC_FS 1214#if IS_ENABLED(CONFIG_AX25) 1215 1216/* ------------------------------------------------------------------------ */ 1217/* 1218 * ax25 -> ASCII conversion 1219 */ 1220static char *ax2asc2(ax25_address *a, char *buf) 1221{ 1222 char c, *s; 1223 int n; 1224 1225 for (n = 0, s = buf; n < 6; n++) { 1226 c = (a->ax25_call[n] >> 1) & 0x7F; 1227 1228 if (c != ' ') 1229 *s++ = c; 1230 } 1231 1232 *s++ = '-'; 1233 n = (a->ax25_call[6] >> 1) & 0x0F; 1234 if (n > 9) { 1235 *s++ = '1'; 1236 n -= 10; 1237 } 1238 1239 *s++ = n + '0'; 1240 *s++ = '\0'; 1241 1242 if (*buf == '\0' || *buf == '-') 1243 return "*"; 1244 1245 return buf; 1246} 1247#endif /* CONFIG_AX25 */ 1248 1249#define HBUFFERLEN 30 1250 1251static void arp_format_neigh_entry(struct seq_file *seq, 1252 struct neighbour *n) 1253{ 1254 char hbuffer[HBUFFERLEN]; 1255 int k, j; 1256 char tbuf[16]; 1257 struct net_device *dev = n->dev; 1258 int hatype = dev->type; 1259 1260 read_lock(&n->lock); 1261 /* Convert hardware address to XX:XX:XX:XX ... form. */ 1262#if IS_ENABLED(CONFIG_AX25) 1263 if (hatype == ARPHRD_AX25 || hatype == ARPHRD_NETROM) 1264 ax2asc2((ax25_address *)n->ha, hbuffer); 1265 else { 1266#endif 1267 for (k = 0, j = 0; k < HBUFFERLEN - 3 && j < dev->addr_len; j++) { 1268 hbuffer[k++] = hex_asc_hi(n->ha[j]); 1269 hbuffer[k++] = hex_asc_lo(n->ha[j]); 1270 hbuffer[k++] = ':'; 1271 } 1272 if (k != 0) 1273 --k; 1274 hbuffer[k] = 0; 1275#if IS_ENABLED(CONFIG_AX25) 1276 } 1277#endif 1278 sprintf(tbuf, "%pI4", n->primary_key); 1279 seq_printf(seq, "%-16s 0x%-10x0x%-10x%s * %s\n", 1280 tbuf, hatype, arp_state_to_flags(n), hbuffer, dev->name); 1281 read_unlock(&n->lock); 1282} 1283 1284static void arp_format_pneigh_entry(struct seq_file *seq, 1285 struct pneigh_entry *n) 1286{ 1287 struct net_device *dev = n->dev; 1288 int hatype = dev ? dev->type : 0; 1289 char tbuf[16]; 1290 1291 sprintf(tbuf, "%pI4", n->key); 1292 seq_printf(seq, "%-16s 0x%-10x0x%-10x%s * %s\n", 1293 tbuf, hatype, ATF_PUBL | ATF_PERM, "00:00:00:00:00:00", 1294 dev ? dev->name : "*"); 1295} 1296 1297static int arp_seq_show(struct seq_file *seq, void *v) 1298{ 1299 if (v == SEQ_START_TOKEN) { 1300 seq_puts(seq, "IP address HW type Flags " 1301 "HW address Mask Device\n"); 1302 } else { 1303 struct neigh_seq_state *state = seq->private; 1304 1305 if (state->flags & NEIGH_SEQ_IS_PNEIGH) 1306 arp_format_pneigh_entry(seq, v); 1307 else 1308 arp_format_neigh_entry(seq, v); 1309 } 1310 1311 return 0; 1312} 1313 1314static void *arp_seq_start(struct seq_file *seq, loff_t *pos) 1315{ 1316 /* Don't want to confuse "arp -a" w/ magic entries, 1317 * so we tell the generic iterator to skip NUD_NOARP. 1318 */ 1319 return neigh_seq_start(seq, pos, &arp_tbl, NEIGH_SEQ_SKIP_NOARP); 1320} 1321 1322/* ------------------------------------------------------------------------ */ 1323 1324static const struct seq_operations arp_seq_ops = { 1325 .start = arp_seq_start, 1326 .next = neigh_seq_next, 1327 .stop = neigh_seq_stop, 1328 .show = arp_seq_show, 1329}; 1330 1331static int arp_seq_open(struct inode *inode, struct file *file) 1332{ 1333 return seq_open_net(inode, file, &arp_seq_ops, 1334 sizeof(struct neigh_seq_state)); 1335} 1336 1337static const struct file_operations arp_seq_fops = { 1338 .owner = THIS_MODULE, 1339 .open = arp_seq_open, 1340 .read = seq_read, 1341 .llseek = seq_lseek, 1342 .release = seq_release_net, 1343}; 1344 1345 1346static int __net_init arp_net_init(struct net *net) 1347{ 1348 if (!proc_create("arp", S_IRUGO, net->proc_net, &arp_seq_fops)) 1349 return -ENOMEM; 1350 return 0; 1351} 1352 1353static void __net_exit arp_net_exit(struct net *net) 1354{ 1355 remove_proc_entry("arp", net->proc_net); 1356} 1357 1358static struct pernet_operations arp_net_ops = { 1359 .init = arp_net_init, 1360 .exit = arp_net_exit, 1361}; 1362 1363static int __init arp_proc_init(void) 1364{ 1365 return register_pernet_subsys(&arp_net_ops); 1366} 1367 1368#else /* CONFIG_PROC_FS */ 1369 1370static int __init arp_proc_init(void) 1371{ 1372 return 0; 1373} 1374 1375#endif /* CONFIG_PROC_FS */ 1376