diff options
Diffstat (limited to 'net/batman-adv/bridge_loop_avoidance.c')
-rw-r--r-- | net/batman-adv/bridge_loop_avoidance.c | 94 |
1 files changed, 51 insertions, 43 deletions
diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c index de27b3175cfd..e14531f1ce1c 100644 --- a/net/batman-adv/bridge_loop_avoidance.c +++ b/net/batman-adv/bridge_loop_avoidance.c | |||
@@ -180,7 +180,7 @@ static struct batadv_bla_claim | |||
180 | */ | 180 | */ |
181 | static struct batadv_bla_backbone_gw * | 181 | static struct batadv_bla_backbone_gw * |
182 | batadv_backbone_hash_find(struct batadv_priv *bat_priv, | 182 | batadv_backbone_hash_find(struct batadv_priv *bat_priv, |
183 | uint8_t *addr, short vid) | 183 | uint8_t *addr, unsigned short vid) |
184 | { | 184 | { |
185 | struct batadv_hashtable *hash = bat_priv->bla.backbone_hash; | 185 | struct batadv_hashtable *hash = bat_priv->bla.backbone_hash; |
186 | struct hlist_head *head; | 186 | struct hlist_head *head; |
@@ -257,7 +257,7 @@ batadv_bla_del_backbone_claims(struct batadv_bla_backbone_gw *backbone_gw) | |||
257 | * @claimtype: the type of the claim (CLAIM, UNCLAIM, ANNOUNCE, ...) | 257 | * @claimtype: the type of the claim (CLAIM, UNCLAIM, ANNOUNCE, ...) |
258 | */ | 258 | */ |
259 | static void batadv_bla_send_claim(struct batadv_priv *bat_priv, uint8_t *mac, | 259 | static void batadv_bla_send_claim(struct batadv_priv *bat_priv, uint8_t *mac, |
260 | short vid, int claimtype) | 260 | unsigned short vid, int claimtype) |
261 | { | 261 | { |
262 | struct sk_buff *skb; | 262 | struct sk_buff *skb; |
263 | struct ethhdr *ethhdr; | 263 | struct ethhdr *ethhdr; |
@@ -307,7 +307,8 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, uint8_t *mac, | |||
307 | */ | 307 | */ |
308 | memcpy(ethhdr->h_source, mac, ETH_ALEN); | 308 | memcpy(ethhdr->h_source, mac, ETH_ALEN); |
309 | batadv_dbg(BATADV_DBG_BLA, bat_priv, | 309 | batadv_dbg(BATADV_DBG_BLA, bat_priv, |
310 | "bla_send_claim(): CLAIM %pM on vid %d\n", mac, vid); | 310 | "bla_send_claim(): CLAIM %pM on vid %d\n", mac, |
311 | BATADV_PRINT_VID(vid)); | ||
311 | break; | 312 | break; |
312 | case BATADV_CLAIM_TYPE_UNCLAIM: | 313 | case BATADV_CLAIM_TYPE_UNCLAIM: |
313 | /* unclaim frame | 314 | /* unclaim frame |
@@ -316,7 +317,7 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, uint8_t *mac, | |||
316 | memcpy(hw_src, mac, ETH_ALEN); | 317 | memcpy(hw_src, mac, ETH_ALEN); |
317 | batadv_dbg(BATADV_DBG_BLA, bat_priv, | 318 | batadv_dbg(BATADV_DBG_BLA, bat_priv, |
318 | "bla_send_claim(): UNCLAIM %pM on vid %d\n", mac, | 319 | "bla_send_claim(): UNCLAIM %pM on vid %d\n", mac, |
319 | vid); | 320 | BATADV_PRINT_VID(vid)); |
320 | break; | 321 | break; |
321 | case BATADV_CLAIM_TYPE_ANNOUNCE: | 322 | case BATADV_CLAIM_TYPE_ANNOUNCE: |
322 | /* announcement frame | 323 | /* announcement frame |
@@ -325,7 +326,7 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, uint8_t *mac, | |||
325 | memcpy(hw_src, mac, ETH_ALEN); | 326 | memcpy(hw_src, mac, ETH_ALEN); |
326 | batadv_dbg(BATADV_DBG_BLA, bat_priv, | 327 | batadv_dbg(BATADV_DBG_BLA, bat_priv, |
327 | "bla_send_claim(): ANNOUNCE of %pM on vid %d\n", | 328 | "bla_send_claim(): ANNOUNCE of %pM on vid %d\n", |
328 | ethhdr->h_source, vid); | 329 | ethhdr->h_source, BATADV_PRINT_VID(vid)); |
329 | break; | 330 | break; |
330 | case BATADV_CLAIM_TYPE_REQUEST: | 331 | case BATADV_CLAIM_TYPE_REQUEST: |
331 | /* request frame | 332 | /* request frame |
@@ -335,13 +336,15 @@ static void batadv_bla_send_claim(struct batadv_priv *bat_priv, uint8_t *mac, | |||
335 | memcpy(hw_src, mac, ETH_ALEN); | 336 | memcpy(hw_src, mac, ETH_ALEN); |
336 | memcpy(ethhdr->h_dest, mac, ETH_ALEN); | 337 | memcpy(ethhdr->h_dest, mac, ETH_ALEN); |
337 | batadv_dbg(BATADV_DBG_BLA, bat_priv, | 338 | batadv_dbg(BATADV_DBG_BLA, bat_priv, |
338 | "bla_send_claim(): REQUEST of %pM to %pMon vid %d\n", | 339 | "bla_send_claim(): REQUEST of %pM to %pM on vid %d\n", |
339 | ethhdr->h_source, ethhdr->h_dest, vid); | 340 | ethhdr->h_source, ethhdr->h_dest, |
341 | BATADV_PRINT_VID(vid)); | ||
340 | break; | 342 | break; |
341 | } | 343 | } |
342 | 344 | ||
343 | if (vid != -1) | 345 | if (vid & BATADV_VLAN_HAS_TAG) |
344 | skb = vlan_insert_tag(skb, htons(ETH_P_8021Q), vid); | 346 | skb = vlan_insert_tag(skb, htons(ETH_P_8021Q), |
347 | vid & VLAN_VID_MASK); | ||
345 | 348 | ||
346 | skb_reset_mac_header(skb); | 349 | skb_reset_mac_header(skb); |
347 | skb->protocol = eth_type_trans(skb, soft_iface); | 350 | skb->protocol = eth_type_trans(skb, soft_iface); |
@@ -367,7 +370,7 @@ out: | |||
367 | */ | 370 | */ |
368 | static struct batadv_bla_backbone_gw * | 371 | static struct batadv_bla_backbone_gw * |
369 | batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, uint8_t *orig, | 372 | batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, uint8_t *orig, |
370 | short vid, bool own_backbone) | 373 | unsigned short vid, bool own_backbone) |
371 | { | 374 | { |
372 | struct batadv_bla_backbone_gw *entry; | 375 | struct batadv_bla_backbone_gw *entry; |
373 | struct batadv_orig_node *orig_node; | 376 | struct batadv_orig_node *orig_node; |
@@ -380,7 +383,7 @@ batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, uint8_t *orig, | |||
380 | 383 | ||
381 | batadv_dbg(BATADV_DBG_BLA, bat_priv, | 384 | batadv_dbg(BATADV_DBG_BLA, bat_priv, |
382 | "bla_get_backbone_gw(): not found (%pM, %d), creating new entry\n", | 385 | "bla_get_backbone_gw(): not found (%pM, %d), creating new entry\n", |
383 | orig, vid); | 386 | orig, BATADV_PRINT_VID(vid)); |
384 | 387 | ||
385 | entry = kzalloc(sizeof(*entry), GFP_ATOMIC); | 388 | entry = kzalloc(sizeof(*entry), GFP_ATOMIC); |
386 | if (!entry) | 389 | if (!entry) |
@@ -434,7 +437,7 @@ batadv_bla_get_backbone_gw(struct batadv_priv *bat_priv, uint8_t *orig, | |||
434 | static void | 437 | static void |
435 | batadv_bla_update_own_backbone_gw(struct batadv_priv *bat_priv, | 438 | batadv_bla_update_own_backbone_gw(struct batadv_priv *bat_priv, |
436 | struct batadv_hard_iface *primary_if, | 439 | struct batadv_hard_iface *primary_if, |
437 | short vid) | 440 | unsigned short vid) |
438 | { | 441 | { |
439 | struct batadv_bla_backbone_gw *backbone_gw; | 442 | struct batadv_bla_backbone_gw *backbone_gw; |
440 | 443 | ||
@@ -456,7 +459,7 @@ batadv_bla_update_own_backbone_gw(struct batadv_priv *bat_priv, | |||
456 | */ | 459 | */ |
457 | static void batadv_bla_answer_request(struct batadv_priv *bat_priv, | 460 | static void batadv_bla_answer_request(struct batadv_priv *bat_priv, |
458 | struct batadv_hard_iface *primary_if, | 461 | struct batadv_hard_iface *primary_if, |
459 | short vid) | 462 | unsigned short vid) |
460 | { | 463 | { |
461 | struct hlist_head *head; | 464 | struct hlist_head *head; |
462 | struct batadv_hashtable *hash; | 465 | struct batadv_hashtable *hash; |
@@ -547,7 +550,7 @@ static void batadv_bla_send_announce(struct batadv_priv *bat_priv, | |||
547 | * @backbone_gw: the backbone gateway which claims it | 550 | * @backbone_gw: the backbone gateway which claims it |
548 | */ | 551 | */ |
549 | static void batadv_bla_add_claim(struct batadv_priv *bat_priv, | 552 | static void batadv_bla_add_claim(struct batadv_priv *bat_priv, |
550 | const uint8_t *mac, const short vid, | 553 | const uint8_t *mac, const unsigned short vid, |
551 | struct batadv_bla_backbone_gw *backbone_gw) | 554 | struct batadv_bla_backbone_gw *backbone_gw) |
552 | { | 555 | { |
553 | struct batadv_bla_claim *claim; | 556 | struct batadv_bla_claim *claim; |
@@ -572,7 +575,7 @@ static void batadv_bla_add_claim(struct batadv_priv *bat_priv, | |||
572 | atomic_set(&claim->refcount, 2); | 575 | atomic_set(&claim->refcount, 2); |
573 | batadv_dbg(BATADV_DBG_BLA, bat_priv, | 576 | batadv_dbg(BATADV_DBG_BLA, bat_priv, |
574 | "bla_add_claim(): adding new entry %pM, vid %d to hash ...\n", | 577 | "bla_add_claim(): adding new entry %pM, vid %d to hash ...\n", |
575 | mac, vid); | 578 | mac, BATADV_PRINT_VID(vid)); |
576 | hash_added = batadv_hash_add(bat_priv->bla.claim_hash, | 579 | hash_added = batadv_hash_add(bat_priv->bla.claim_hash, |
577 | batadv_compare_claim, | 580 | batadv_compare_claim, |
578 | batadv_choose_claim, claim, | 581 | batadv_choose_claim, claim, |
@@ -591,7 +594,7 @@ static void batadv_bla_add_claim(struct batadv_priv *bat_priv, | |||
591 | 594 | ||
592 | batadv_dbg(BATADV_DBG_BLA, bat_priv, | 595 | batadv_dbg(BATADV_DBG_BLA, bat_priv, |
593 | "bla_add_claim(): changing ownership for %pM, vid %d\n", | 596 | "bla_add_claim(): changing ownership for %pM, vid %d\n", |
594 | mac, vid); | 597 | mac, BATADV_PRINT_VID(vid)); |
595 | 598 | ||
596 | claim->backbone_gw->crc ^= crc16(0, claim->addr, ETH_ALEN); | 599 | claim->backbone_gw->crc ^= crc16(0, claim->addr, ETH_ALEN); |
597 | batadv_backbone_gw_free_ref(claim->backbone_gw); | 600 | batadv_backbone_gw_free_ref(claim->backbone_gw); |
@@ -611,7 +614,7 @@ claim_free_ref: | |||
611 | * given mac address and vid. | 614 | * given mac address and vid. |
612 | */ | 615 | */ |
613 | static void batadv_bla_del_claim(struct batadv_priv *bat_priv, | 616 | static void batadv_bla_del_claim(struct batadv_priv *bat_priv, |
614 | const uint8_t *mac, const short vid) | 617 | const uint8_t *mac, const unsigned short vid) |
615 | { | 618 | { |
616 | struct batadv_bla_claim search_claim, *claim; | 619 | struct batadv_bla_claim search_claim, *claim; |
617 | 620 | ||
@@ -622,7 +625,7 @@ static void batadv_bla_del_claim(struct batadv_priv *bat_priv, | |||
622 | return; | 625 | return; |
623 | 626 | ||
624 | batadv_dbg(BATADV_DBG_BLA, bat_priv, "bla_del_claim(): %pM, vid %d\n", | 627 | batadv_dbg(BATADV_DBG_BLA, bat_priv, "bla_del_claim(): %pM, vid %d\n", |
625 | mac, vid); | 628 | mac, BATADV_PRINT_VID(vid)); |
626 | 629 | ||
627 | batadv_hash_remove(bat_priv->bla.claim_hash, batadv_compare_claim, | 630 | batadv_hash_remove(bat_priv->bla.claim_hash, batadv_compare_claim, |
628 | batadv_choose_claim, claim); | 631 | batadv_choose_claim, claim); |
@@ -637,7 +640,7 @@ static void batadv_bla_del_claim(struct batadv_priv *bat_priv, | |||
637 | /* check for ANNOUNCE frame, return 1 if handled */ | 640 | /* check for ANNOUNCE frame, return 1 if handled */ |
638 | static int batadv_handle_announce(struct batadv_priv *bat_priv, | 641 | static int batadv_handle_announce(struct batadv_priv *bat_priv, |
639 | uint8_t *an_addr, uint8_t *backbone_addr, | 642 | uint8_t *an_addr, uint8_t *backbone_addr, |
640 | short vid) | 643 | unsigned short vid) |
641 | { | 644 | { |
642 | struct batadv_bla_backbone_gw *backbone_gw; | 645 | struct batadv_bla_backbone_gw *backbone_gw; |
643 | uint16_t crc; | 646 | uint16_t crc; |
@@ -658,12 +661,13 @@ static int batadv_handle_announce(struct batadv_priv *bat_priv, | |||
658 | 661 | ||
659 | batadv_dbg(BATADV_DBG_BLA, bat_priv, | 662 | batadv_dbg(BATADV_DBG_BLA, bat_priv, |
660 | "handle_announce(): ANNOUNCE vid %d (sent by %pM)... CRC = %#.4x\n", | 663 | "handle_announce(): ANNOUNCE vid %d (sent by %pM)... CRC = %#.4x\n", |
661 | vid, backbone_gw->orig, crc); | 664 | BATADV_PRINT_VID(vid), backbone_gw->orig, crc); |
662 | 665 | ||
663 | if (backbone_gw->crc != crc) { | 666 | if (backbone_gw->crc != crc) { |
664 | batadv_dbg(BATADV_DBG_BLA, backbone_gw->bat_priv, | 667 | batadv_dbg(BATADV_DBG_BLA, backbone_gw->bat_priv, |
665 | "handle_announce(): CRC FAILED for %pM/%d (my = %#.4x, sent = %#.4x)\n", | 668 | "handle_announce(): CRC FAILED for %pM/%d (my = %#.4x, sent = %#.4x)\n", |
666 | backbone_gw->orig, backbone_gw->vid, | 669 | backbone_gw->orig, |
670 | BATADV_PRINT_VID(backbone_gw->vid), | ||
667 | backbone_gw->crc, crc); | 671 | backbone_gw->crc, crc); |
668 | 672 | ||
669 | batadv_bla_send_request(backbone_gw); | 673 | batadv_bla_send_request(backbone_gw); |
@@ -685,7 +689,7 @@ static int batadv_handle_announce(struct batadv_priv *bat_priv, | |||
685 | static int batadv_handle_request(struct batadv_priv *bat_priv, | 689 | static int batadv_handle_request(struct batadv_priv *bat_priv, |
686 | struct batadv_hard_iface *primary_if, | 690 | struct batadv_hard_iface *primary_if, |
687 | uint8_t *backbone_addr, | 691 | uint8_t *backbone_addr, |
688 | struct ethhdr *ethhdr, short vid) | 692 | struct ethhdr *ethhdr, unsigned short vid) |
689 | { | 693 | { |
690 | /* check for REQUEST frame */ | 694 | /* check for REQUEST frame */ |
691 | if (!batadv_compare_eth(backbone_addr, ethhdr->h_dest)) | 695 | if (!batadv_compare_eth(backbone_addr, ethhdr->h_dest)) |
@@ -699,7 +703,7 @@ static int batadv_handle_request(struct batadv_priv *bat_priv, | |||
699 | 703 | ||
700 | batadv_dbg(BATADV_DBG_BLA, bat_priv, | 704 | batadv_dbg(BATADV_DBG_BLA, bat_priv, |
701 | "handle_request(): REQUEST vid %d (sent by %pM)...\n", | 705 | "handle_request(): REQUEST vid %d (sent by %pM)...\n", |
702 | vid, ethhdr->h_source); | 706 | BATADV_PRINT_VID(vid), ethhdr->h_source); |
703 | 707 | ||
704 | batadv_bla_answer_request(bat_priv, primary_if, vid); | 708 | batadv_bla_answer_request(bat_priv, primary_if, vid); |
705 | return 1; | 709 | return 1; |
@@ -709,7 +713,7 @@ static int batadv_handle_request(struct batadv_priv *bat_priv, | |||
709 | static int batadv_handle_unclaim(struct batadv_priv *bat_priv, | 713 | static int batadv_handle_unclaim(struct batadv_priv *bat_priv, |
710 | struct batadv_hard_iface *primary_if, | 714 | struct batadv_hard_iface *primary_if, |
711 | uint8_t *backbone_addr, | 715 | uint8_t *backbone_addr, |
712 | uint8_t *claim_addr, short vid) | 716 | uint8_t *claim_addr, unsigned short vid) |
713 | { | 717 | { |
714 | struct batadv_bla_backbone_gw *backbone_gw; | 718 | struct batadv_bla_backbone_gw *backbone_gw; |
715 | 719 | ||
@@ -727,7 +731,7 @@ static int batadv_handle_unclaim(struct batadv_priv *bat_priv, | |||
727 | /* this must be an UNCLAIM frame */ | 731 | /* this must be an UNCLAIM frame */ |
728 | batadv_dbg(BATADV_DBG_BLA, bat_priv, | 732 | batadv_dbg(BATADV_DBG_BLA, bat_priv, |
729 | "handle_unclaim(): UNCLAIM %pM on vid %d (sent by %pM)...\n", | 733 | "handle_unclaim(): UNCLAIM %pM on vid %d (sent by %pM)...\n", |
730 | claim_addr, vid, backbone_gw->orig); | 734 | claim_addr, BATADV_PRINT_VID(vid), backbone_gw->orig); |
731 | 735 | ||
732 | batadv_bla_del_claim(bat_priv, claim_addr, vid); | 736 | batadv_bla_del_claim(bat_priv, claim_addr, vid); |
733 | batadv_backbone_gw_free_ref(backbone_gw); | 737 | batadv_backbone_gw_free_ref(backbone_gw); |
@@ -738,7 +742,7 @@ static int batadv_handle_unclaim(struct batadv_priv *bat_priv, | |||
738 | static int batadv_handle_claim(struct batadv_priv *bat_priv, | 742 | static int batadv_handle_claim(struct batadv_priv *bat_priv, |
739 | struct batadv_hard_iface *primary_if, | 743 | struct batadv_hard_iface *primary_if, |
740 | uint8_t *backbone_addr, uint8_t *claim_addr, | 744 | uint8_t *backbone_addr, uint8_t *claim_addr, |
741 | short vid) | 745 | unsigned short vid) |
742 | { | 746 | { |
743 | struct batadv_bla_backbone_gw *backbone_gw; | 747 | struct batadv_bla_backbone_gw *backbone_gw; |
744 | 748 | ||
@@ -861,14 +865,15 @@ static int batadv_bla_process_claim(struct batadv_priv *bat_priv, | |||
861 | struct batadv_bla_claim_dst *bla_dst; | 865 | struct batadv_bla_claim_dst *bla_dst; |
862 | uint16_t proto; | 866 | uint16_t proto; |
863 | int headlen; | 867 | int headlen; |
864 | short vid = -1; | 868 | unsigned short vid = BATADV_NO_FLAGS; |
865 | int ret; | 869 | int ret; |
866 | 870 | ||
867 | ethhdr = (struct ethhdr *)skb_mac_header(skb); | 871 | ethhdr = eth_hdr(skb); |
868 | 872 | ||
869 | if (ntohs(ethhdr->h_proto) == ETH_P_8021Q) { | 873 | if (ntohs(ethhdr->h_proto) == ETH_P_8021Q) { |
870 | vhdr = (struct vlan_ethhdr *)ethhdr; | 874 | vhdr = (struct vlan_ethhdr *)ethhdr; |
871 | vid = ntohs(vhdr->h_vlan_TCI) & VLAN_VID_MASK; | 875 | vid = ntohs(vhdr->h_vlan_TCI) & VLAN_VID_MASK; |
876 | vid |= BATADV_VLAN_HAS_TAG; | ||
872 | proto = ntohs(vhdr->h_vlan_encapsulated_proto); | 877 | proto = ntohs(vhdr->h_vlan_encapsulated_proto); |
873 | headlen = sizeof(*vhdr); | 878 | headlen = sizeof(*vhdr); |
874 | } else { | 879 | } else { |
@@ -885,7 +890,7 @@ static int batadv_bla_process_claim(struct batadv_priv *bat_priv, | |||
885 | return 0; | 890 | return 0; |
886 | 891 | ||
887 | /* pskb_may_pull() may have modified the pointers, get ethhdr again */ | 892 | /* pskb_may_pull() may have modified the pointers, get ethhdr again */ |
888 | ethhdr = (struct ethhdr *)skb_mac_header(skb); | 893 | ethhdr = eth_hdr(skb); |
889 | arphdr = (struct arphdr *)((uint8_t *)ethhdr + headlen); | 894 | arphdr = (struct arphdr *)((uint8_t *)ethhdr + headlen); |
890 | 895 | ||
891 | /* Check whether the ARP frame carries a valid | 896 | /* Check whether the ARP frame carries a valid |
@@ -910,7 +915,8 @@ static int batadv_bla_process_claim(struct batadv_priv *bat_priv, | |||
910 | if (ret == 1) | 915 | if (ret == 1) |
911 | batadv_dbg(BATADV_DBG_BLA, bat_priv, | 916 | batadv_dbg(BATADV_DBG_BLA, bat_priv, |
912 | "bla_process_claim(): received a claim frame from another group. From: %pM on vid %d ...(hw_src %pM, hw_dst %pM)\n", | 917 | "bla_process_claim(): received a claim frame from another group. From: %pM on vid %d ...(hw_src %pM, hw_dst %pM)\n", |
913 | ethhdr->h_source, vid, hw_src, hw_dst); | 918 | ethhdr->h_source, BATADV_PRINT_VID(vid), hw_src, |
919 | hw_dst); | ||
914 | 920 | ||
915 | if (ret < 2) | 921 | if (ret < 2) |
916 | return ret; | 922 | return ret; |
@@ -945,7 +951,7 @@ static int batadv_bla_process_claim(struct batadv_priv *bat_priv, | |||
945 | 951 | ||
946 | batadv_dbg(BATADV_DBG_BLA, bat_priv, | 952 | batadv_dbg(BATADV_DBG_BLA, bat_priv, |
947 | "bla_process_claim(): ERROR - this looks like a claim frame, but is useless. eth src %pM on vid %d ...(hw_src %pM, hw_dst %pM)\n", | 953 | "bla_process_claim(): ERROR - this looks like a claim frame, but is useless. eth src %pM on vid %d ...(hw_src %pM, hw_dst %pM)\n", |
948 | ethhdr->h_source, vid, hw_src, hw_dst); | 954 | ethhdr->h_source, BATADV_PRINT_VID(vid), hw_src, hw_dst); |
949 | return 1; | 955 | return 1; |
950 | } | 956 | } |
951 | 957 | ||
@@ -1362,7 +1368,7 @@ int batadv_bla_is_backbone_gw(struct sk_buff *skb, | |||
1362 | struct ethhdr *ethhdr; | 1368 | struct ethhdr *ethhdr; |
1363 | struct vlan_ethhdr *vhdr; | 1369 | struct vlan_ethhdr *vhdr; |
1364 | struct batadv_bla_backbone_gw *backbone_gw; | 1370 | struct batadv_bla_backbone_gw *backbone_gw; |
1365 | short vid = -1; | 1371 | unsigned short vid = BATADV_NO_FLAGS; |
1366 | 1372 | ||
1367 | if (!atomic_read(&orig_node->bat_priv->bridge_loop_avoidance)) | 1373 | if (!atomic_read(&orig_node->bat_priv->bridge_loop_avoidance)) |
1368 | return 0; | 1374 | return 0; |
@@ -1379,6 +1385,7 @@ int batadv_bla_is_backbone_gw(struct sk_buff *skb, | |||
1379 | 1385 | ||
1380 | vhdr = (struct vlan_ethhdr *)(skb->data + hdr_size); | 1386 | vhdr = (struct vlan_ethhdr *)(skb->data + hdr_size); |
1381 | vid = ntohs(vhdr->h_vlan_TCI) & VLAN_VID_MASK; | 1387 | vid = ntohs(vhdr->h_vlan_TCI) & VLAN_VID_MASK; |
1388 | vid |= BATADV_VLAN_HAS_TAG; | ||
1382 | } | 1389 | } |
1383 | 1390 | ||
1384 | /* see if this originator is a backbone gw for this VLAN */ | 1391 | /* see if this originator is a backbone gw for this VLAN */ |
@@ -1428,15 +1435,15 @@ void batadv_bla_free(struct batadv_priv *bat_priv) | |||
1428 | * returns 1, otherwise it returns 0 and the caller shall further | 1435 | * returns 1, otherwise it returns 0 and the caller shall further |
1429 | * process the skb. | 1436 | * process the skb. |
1430 | */ | 1437 | */ |
1431 | int batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb, short vid, | 1438 | int batadv_bla_rx(struct batadv_priv *bat_priv, struct sk_buff *skb, |
1432 | bool is_bcast) | 1439 | unsigned short vid, bool is_bcast) |
1433 | { | 1440 | { |
1434 | struct ethhdr *ethhdr; | 1441 | struct ethhdr *ethhdr; |
1435 | struct batadv_bla_claim search_claim, *claim = NULL; | 1442 | struct batadv_bla_claim search_claim, *claim = NULL; |
1436 | struct batadv_hard_iface *primary_if; | 1443 | struct batadv_hard_iface *primary_if; |
1437 | int ret; | 1444 | int ret; |
1438 | 1445 | ||
1439 | ethhdr = (struct ethhdr *)skb_mac_header(skb); | 1446 | ethhdr = eth_hdr(skb); |
1440 | 1447 | ||
1441 | primary_if = batadv_primary_if_get_selected(bat_priv); | 1448 | primary_if = batadv_primary_if_get_selected(bat_priv); |
1442 | if (!primary_if) | 1449 | if (!primary_if) |
@@ -1523,7 +1530,8 @@ out: | |||
1523 | * returns 1, otherwise it returns 0 and the caller shall further | 1530 | * returns 1, otherwise it returns 0 and the caller shall further |
1524 | * process the skb. | 1531 | * process the skb. |
1525 | */ | 1532 | */ |
1526 | int batadv_bla_tx(struct batadv_priv *bat_priv, struct sk_buff *skb, short vid) | 1533 | int batadv_bla_tx(struct batadv_priv *bat_priv, struct sk_buff *skb, |
1534 | unsigned short vid) | ||
1527 | { | 1535 | { |
1528 | struct ethhdr *ethhdr; | 1536 | struct ethhdr *ethhdr; |
1529 | struct batadv_bla_claim search_claim, *claim = NULL; | 1537 | struct batadv_bla_claim search_claim, *claim = NULL; |
@@ -1543,7 +1551,7 @@ int batadv_bla_tx(struct batadv_priv *bat_priv, struct sk_buff *skb, short vid) | |||
1543 | if (batadv_bla_process_claim(bat_priv, primary_if, skb)) | 1551 | if (batadv_bla_process_claim(bat_priv, primary_if, skb)) |
1544 | goto handled; | 1552 | goto handled; |
1545 | 1553 | ||
1546 | ethhdr = (struct ethhdr *)skb_mac_header(skb); | 1554 | ethhdr = eth_hdr(skb); |
1547 | 1555 | ||
1548 | if (unlikely(atomic_read(&bat_priv->bla.num_requests))) | 1556 | if (unlikely(atomic_read(&bat_priv->bla.num_requests))) |
1549 | /* don't allow broadcasts while requests are in flight */ | 1557 | /* don't allow broadcasts while requests are in flight */ |
@@ -1627,8 +1635,8 @@ int batadv_bla_claim_table_seq_print_text(struct seq_file *seq, void *offset) | |||
1627 | hlist_for_each_entry_rcu(claim, head, hash_entry) { | 1635 | hlist_for_each_entry_rcu(claim, head, hash_entry) { |
1628 | is_own = batadv_compare_eth(claim->backbone_gw->orig, | 1636 | is_own = batadv_compare_eth(claim->backbone_gw->orig, |
1629 | primary_addr); | 1637 | primary_addr); |
1630 | seq_printf(seq, " * %pM on % 5d by %pM [%c] (%#.4x)\n", | 1638 | seq_printf(seq, " * %pM on %5d by %pM [%c] (%#.4x)\n", |
1631 | claim->addr, claim->vid, | 1639 | claim->addr, BATADV_PRINT_VID(claim->vid), |
1632 | claim->backbone_gw->orig, | 1640 | claim->backbone_gw->orig, |
1633 | (is_own ? 'x' : ' '), | 1641 | (is_own ? 'x' : ' '), |
1634 | claim->backbone_gw->crc); | 1642 | claim->backbone_gw->crc); |
@@ -1680,10 +1688,10 @@ int batadv_bla_backbone_table_seq_print_text(struct seq_file *seq, void *offset) | |||
1680 | if (is_own) | 1688 | if (is_own) |
1681 | continue; | 1689 | continue; |
1682 | 1690 | ||
1683 | seq_printf(seq, | 1691 | seq_printf(seq, " * %pM on %5d %4i.%03is (%#.4x)\n", |
1684 | " * %pM on % 5d % 4i.%03is (%#.4x)\n", | 1692 | backbone_gw->orig, |
1685 | backbone_gw->orig, backbone_gw->vid, | 1693 | BATADV_PRINT_VID(backbone_gw->vid), secs, |
1686 | secs, msecs, backbone_gw->crc); | 1694 | msecs, backbone_gw->crc); |
1687 | } | 1695 | } |
1688 | rcu_read_unlock(); | 1696 | rcu_read_unlock(); |
1689 | } | 1697 | } |