1 // SPDX-License-Identifier: GPL-2.0
3 * Copyright IBM Corp. 2007, 2009
4 * Author(s): Utz Bacher <utz.bacher@de.ibm.com>,
5 * Frank Pavlic <fpavlic@de.ibm.com>,
6 * Thomas Spatzier <tspat@de.ibm.com>,
7 * Frank Blaschka <frank.blaschka@de.ibm.com>
10 #define KMSG_COMPONENT "qeth"
11 #define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
13 #include <linux/module.h>
14 #include <linux/moduleparam.h>
15 #include <linux/bitops.h>
16 #include <linux/string.h>
17 #include <linux/errno.h>
18 #include <linux/kernel.h>
19 #include <linux/etherdevice.h>
22 #include <linux/ipv6.h>
23 #include <linux/inetdevice.h>
24 #include <linux/igmp.h>
25 #include <linux/slab.h>
26 #include <linux/if_vlan.h>
30 #include <net/route.h>
32 #include <net/ip6_fib.h>
33 #include <net/ip6_checksum.h>
34 #include <net/iucv/af_iucv.h>
35 #include <linux/hashtable.h>
40 static int qeth_l3_set_offline(struct ccwgroup_device *);
41 static int qeth_l3_stop(struct net_device *);
42 static void qeth_l3_set_rx_mode(struct net_device *dev);
43 static int qeth_l3_register_addr_entry(struct qeth_card *,
44 struct qeth_ipaddr *);
45 static int qeth_l3_deregister_addr_entry(struct qeth_card *,
46 struct qeth_ipaddr *);
48 static int qeth_l3_isxdigit(char *buf)
51 if (!isxdigit(*buf++))
57 static void qeth_l3_ipaddr4_to_string(const __u8 *addr, char *buf)
59 sprintf(buf, "%pI4", addr);
62 static int qeth_l3_string_to_ipaddr4(const char *buf, __u8 *addr)
64 int count = 0, rc = 0;
68 rc = sscanf(buf, "%u.%u.%u.%u%c",
69 &in[0], &in[1], &in[2], &in[3], &c);
70 if (rc != 4 && (rc != 5 || c != '\n'))
72 for (count = 0; count < 4; count++) {
75 addr[count] = in[count];
80 static void qeth_l3_ipaddr6_to_string(const __u8 *addr, char *buf)
82 sprintf(buf, "%pI6", addr);
85 static int qeth_l3_string_to_ipaddr6(const char *buf, __u8 *addr)
87 const char *end, *end_tmp, *start;
90 int num2, cnt, out, found, save_cnt;
91 unsigned short in_tmp[8] = {0, };
93 cnt = out = found = save_cnt = num2 = 0;
98 end = strchr(start, ':');
100 end = buf + strlen(buf);
101 end_tmp = strchr(start, '\n');
108 if ((end - start) > 4)
110 memcpy(num, start, end - start);
111 if (!qeth_l3_isxdigit(num))
113 sscanf(start, "%x", &num2);
115 in_tmp[save_cnt++] = num2;
127 if (cnt + save_cnt > 8)
131 in[cnt--] = in_tmp[--save_cnt];
135 void qeth_l3_ipaddr_to_string(enum qeth_prot_versions proto, const __u8 *addr,
138 if (proto == QETH_PROT_IPV4)
139 qeth_l3_ipaddr4_to_string(addr, buf);
140 else if (proto == QETH_PROT_IPV6)
141 qeth_l3_ipaddr6_to_string(addr, buf);
144 int qeth_l3_string_to_ipaddr(const char *buf, enum qeth_prot_versions proto,
147 if (proto == QETH_PROT_IPV4)
148 return qeth_l3_string_to_ipaddr4(buf, addr);
149 else if (proto == QETH_PROT_IPV6)
150 return qeth_l3_string_to_ipaddr6(buf, addr);
155 static void qeth_l3_convert_addr_to_bits(u8 *addr, u8 *bits, int len)
160 for (i = 0; i < len; ++i) {
162 for (j = 7; j >= 0; --j) {
163 bits[i*8 + j] = octet & 1;
169 static bool qeth_l3_is_addr_covered_by_ipato(struct qeth_card *card,
170 struct qeth_ipaddr *addr)
172 struct qeth_ipato_entry *ipatoe;
173 u8 addr_bits[128] = {0, };
174 u8 ipatoe_bits[128] = {0, };
177 if (!card->ipato.enabled)
179 if (addr->type != QETH_IP_TYPE_NORMAL)
182 qeth_l3_convert_addr_to_bits((u8 *) &addr->u, addr_bits,
183 (addr->proto == QETH_PROT_IPV4)? 4:16);
184 list_for_each_entry(ipatoe, &card->ipato.entries, entry) {
185 if (addr->proto != ipatoe->proto)
187 qeth_l3_convert_addr_to_bits(ipatoe->addr, ipatoe_bits,
188 (ipatoe->proto == QETH_PROT_IPV4) ?
190 if (addr->proto == QETH_PROT_IPV4)
191 rc = !memcmp(addr_bits, ipatoe_bits,
192 min(32, ipatoe->mask_bits));
194 rc = !memcmp(addr_bits, ipatoe_bits,
195 min(128, ipatoe->mask_bits));
200 if ((addr->proto == QETH_PROT_IPV4) && card->ipato.invert4)
202 else if ((addr->proto == QETH_PROT_IPV6) && card->ipato.invert6)
209 qeth_l3_ipaddrs_is_equal(struct qeth_ipaddr *addr1, struct qeth_ipaddr *addr2)
211 return addr1->proto == addr2->proto &&
212 !memcmp(&addr1->u, &addr2->u, sizeof(addr1->u)) &&
213 ether_addr_equal_64bits(addr1->mac, addr2->mac);
216 static struct qeth_ipaddr *
217 qeth_l3_ip_from_hash(struct qeth_card *card, struct qeth_ipaddr *tmp_addr)
219 struct qeth_ipaddr *addr;
221 if (tmp_addr->is_multicast) {
222 hash_for_each_possible(card->ip_mc_htable, addr,
223 hnode, qeth_l3_ipaddr_hash(tmp_addr))
224 if (qeth_l3_ipaddrs_is_equal(tmp_addr, addr))
227 hash_for_each_possible(card->ip_htable, addr,
228 hnode, qeth_l3_ipaddr_hash(tmp_addr))
229 if (qeth_l3_ipaddrs_is_equal(tmp_addr, addr))
236 int qeth_l3_delete_ip(struct qeth_card *card, struct qeth_ipaddr *tmp_addr)
239 struct qeth_ipaddr *addr;
241 QETH_CARD_TEXT(card, 4, "delip");
243 if (tmp_addr->proto == QETH_PROT_IPV4)
244 QETH_CARD_HEX(card, 4, &tmp_addr->u.a4.addr, 4);
246 QETH_CARD_HEX(card, 4, &tmp_addr->u.a6.addr, 8);
247 QETH_CARD_HEX(card, 4, ((char *)&tmp_addr->u.a6.addr) + 8, 8);
250 addr = qeth_l3_ip_from_hash(card, tmp_addr);
255 if (addr->ref_counter > 0 && (addr->type == QETH_IP_TYPE_NORMAL ||
256 addr->type == QETH_IP_TYPE_RXIP))
258 if (addr->in_progress)
261 if (!qeth_card_hw_is_reachable(card)) {
262 addr->disp_flag = QETH_DISP_ADDR_DELETE;
266 rc = qeth_l3_deregister_addr_entry(card, addr);
268 hash_del(&addr->hnode);
274 int qeth_l3_add_ip(struct qeth_card *card, struct qeth_ipaddr *tmp_addr)
277 struct qeth_ipaddr *addr;
279 QETH_CARD_TEXT(card, 4, "addip");
281 if (tmp_addr->proto == QETH_PROT_IPV4)
282 QETH_CARD_HEX(card, 4, &tmp_addr->u.a4.addr, 4);
284 QETH_CARD_HEX(card, 4, &tmp_addr->u.a6.addr, 8);
285 QETH_CARD_HEX(card, 4, ((char *)&tmp_addr->u.a6.addr) + 8, 8);
288 addr = qeth_l3_ip_from_hash(card, tmp_addr);
290 addr = qeth_l3_get_addr_buffer(tmp_addr->proto);
294 memcpy(addr, tmp_addr, sizeof(struct qeth_ipaddr));
295 addr->ref_counter = 1;
297 if (qeth_l3_is_addr_covered_by_ipato(card, addr)) {
298 QETH_CARD_TEXT(card, 2, "tkovaddr");
299 addr->set_flags |= QETH_IPA_SETIP_TAKEOVER_FLAG;
301 hash_add(card->ip_htable, &addr->hnode,
302 qeth_l3_ipaddr_hash(addr));
304 if (!qeth_card_hw_is_reachable(card)) {
305 addr->disp_flag = QETH_DISP_ADDR_ADD;
309 /* qeth_l3_register_addr_entry can go to sleep
310 * if we add a IPV4 addr. It is caused by the reason
311 * that SETIP ipa cmd starts ARP staff for IPV4 addr.
312 * Thus we should unlock spinlock, and make a protection
313 * using in_progress variable to indicate that there is
314 * an hardware operation with this IPV4 address
316 if (addr->proto == QETH_PROT_IPV4) {
317 addr->in_progress = 1;
318 spin_unlock_bh(&card->ip_lock);
319 rc = qeth_l3_register_addr_entry(card, addr);
320 spin_lock_bh(&card->ip_lock);
321 addr->in_progress = 0;
323 rc = qeth_l3_register_addr_entry(card, addr);
325 if (!rc || (rc == IPA_RC_DUPLICATE_IP_ADDRESS) ||
326 (rc == IPA_RC_LAN_OFFLINE)) {
327 addr->disp_flag = QETH_DISP_ADDR_DO_NOTHING;
328 if (addr->ref_counter < 1) {
329 qeth_l3_delete_ip(card, addr);
333 hash_del(&addr->hnode);
337 if (addr->type == QETH_IP_TYPE_NORMAL ||
338 addr->type == QETH_IP_TYPE_RXIP)
346 struct qeth_ipaddr *qeth_l3_get_addr_buffer(
347 enum qeth_prot_versions prot)
349 struct qeth_ipaddr *addr;
351 addr = kzalloc(sizeof(struct qeth_ipaddr), GFP_ATOMIC);
355 addr->type = QETH_IP_TYPE_NORMAL;
356 addr->disp_flag = QETH_DISP_ADDR_DO_NOTHING;
362 static void qeth_l3_clear_ip_htable(struct qeth_card *card, int recover)
364 struct qeth_ipaddr *addr;
365 struct hlist_node *tmp;
368 QETH_CARD_TEXT(card, 4, "clearip");
370 if (recover && card->options.sniffer)
373 spin_lock_bh(&card->ip_lock);
375 hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) {
377 hash_del(&addr->hnode);
381 addr->disp_flag = QETH_DISP_ADDR_ADD;
384 spin_unlock_bh(&card->ip_lock);
386 spin_lock_bh(&card->mclock);
388 hash_for_each_safe(card->ip_mc_htable, i, tmp, addr, hnode) {
389 hash_del(&addr->hnode);
393 spin_unlock_bh(&card->mclock);
397 static void qeth_l3_recover_ip(struct qeth_card *card)
399 struct qeth_ipaddr *addr;
400 struct hlist_node *tmp;
404 QETH_CARD_TEXT(card, 4, "recovrip");
406 spin_lock_bh(&card->ip_lock);
408 hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) {
409 if (addr->disp_flag == QETH_DISP_ADDR_DELETE) {
410 qeth_l3_deregister_addr_entry(card, addr);
411 hash_del(&addr->hnode);
413 } else if (addr->disp_flag == QETH_DISP_ADDR_ADD) {
414 if (addr->proto == QETH_PROT_IPV4) {
415 addr->in_progress = 1;
416 spin_unlock_bh(&card->ip_lock);
417 rc = qeth_l3_register_addr_entry(card, addr);
418 spin_lock_bh(&card->ip_lock);
419 addr->in_progress = 0;
421 rc = qeth_l3_register_addr_entry(card, addr);
424 addr->disp_flag = QETH_DISP_ADDR_DO_NOTHING;
425 if (addr->ref_counter < 1)
426 qeth_l3_delete_ip(card, addr);
428 hash_del(&addr->hnode);
434 spin_unlock_bh(&card->ip_lock);
438 static int qeth_l3_send_setdelmc(struct qeth_card *card,
439 struct qeth_ipaddr *addr, int ipacmd)
442 struct qeth_cmd_buffer *iob;
443 struct qeth_ipa_cmd *cmd;
445 QETH_CARD_TEXT(card, 4, "setdelmc");
447 iob = qeth_get_ipacmd_buffer(card, ipacmd, addr->proto);
450 cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
451 ether_addr_copy(cmd->data.setdelipm.mac, addr->mac);
452 if (addr->proto == QETH_PROT_IPV6)
453 memcpy(cmd->data.setdelipm.ip6, &addr->u.a6.addr,
454 sizeof(struct in6_addr));
456 memcpy(&cmd->data.setdelipm.ip4, &addr->u.a4.addr, 4);
458 rc = qeth_send_ipa_cmd(card, iob, NULL, NULL);
463 static void qeth_l3_fill_netmask(u8 *netmask, unsigned int len)
466 for (i = 0; i < 16; i++) {
471 netmask[i] = (u8)(0xFF00 >> j);
477 static int qeth_l3_send_setdelip(struct qeth_card *card,
478 struct qeth_ipaddr *addr, int ipacmd, unsigned int flags)
481 struct qeth_cmd_buffer *iob;
482 struct qeth_ipa_cmd *cmd;
485 QETH_CARD_TEXT(card, 4, "setdelip");
486 QETH_CARD_TEXT_(card, 4, "flags%02X", flags);
488 iob = qeth_get_ipacmd_buffer(card, ipacmd, addr->proto);
491 cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
492 if (addr->proto == QETH_PROT_IPV6) {
493 memcpy(cmd->data.setdelip6.ip_addr, &addr->u.a6.addr,
494 sizeof(struct in6_addr));
495 qeth_l3_fill_netmask(netmask, addr->u.a6.pfxlen);
496 memcpy(cmd->data.setdelip6.mask, netmask,
497 sizeof(struct in6_addr));
498 cmd->data.setdelip6.flags = flags;
500 memcpy(cmd->data.setdelip4.ip_addr, &addr->u.a4.addr, 4);
501 memcpy(cmd->data.setdelip4.mask, &addr->u.a4.mask, 4);
502 cmd->data.setdelip4.flags = flags;
505 rc = qeth_send_ipa_cmd(card, iob, NULL, NULL);
510 static int qeth_l3_send_setrouting(struct qeth_card *card,
511 enum qeth_routing_types type, enum qeth_prot_versions prot)
514 struct qeth_ipa_cmd *cmd;
515 struct qeth_cmd_buffer *iob;
517 QETH_CARD_TEXT(card, 4, "setroutg");
518 iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SETRTG, prot);
521 cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
522 cmd->data.setrtg.type = (type);
523 rc = qeth_send_ipa_cmd(card, iob, NULL, NULL);
528 static int qeth_l3_correct_routing_type(struct qeth_card *card,
529 enum qeth_routing_types *type, enum qeth_prot_versions prot)
531 if (card->info.type == QETH_CARD_TYPE_IQD) {
534 case PRIMARY_CONNECTOR:
535 case SECONDARY_CONNECTOR:
536 case MULTICAST_ROUTER:
545 case SECONDARY_ROUTER:
547 case MULTICAST_ROUTER:
548 if (qeth_is_ipafunc_supported(card, prot,
560 int qeth_l3_setrouting_v4(struct qeth_card *card)
564 QETH_CARD_TEXT(card, 3, "setrtg4");
566 rc = qeth_l3_correct_routing_type(card, &card->options.route4.type,
571 rc = qeth_l3_send_setrouting(card, card->options.route4.type,
574 card->options.route4.type = NO_ROUTER;
575 QETH_DBF_MESSAGE(2, "Error (0x%04x) while setting routing type"
576 " on %s. Type set to 'no router'.\n", rc,
577 QETH_CARD_IFNAME(card));
582 int qeth_l3_setrouting_v6(struct qeth_card *card)
586 QETH_CARD_TEXT(card, 3, "setrtg6");
588 if (!qeth_is_supported(card, IPA_IPV6))
590 rc = qeth_l3_correct_routing_type(card, &card->options.route6.type,
595 rc = qeth_l3_send_setrouting(card, card->options.route6.type,
598 card->options.route6.type = NO_ROUTER;
599 QETH_DBF_MESSAGE(2, "Error (0x%04x) while setting routing type"
600 " on %s. Type set to 'no router'.\n", rc,
601 QETH_CARD_IFNAME(card));
607 * IP address takeover related functions
611 * qeth_l3_update_ipato() - Update 'takeover' property, for all NORMAL IPs.
613 * Caller must hold ip_lock.
615 void qeth_l3_update_ipato(struct qeth_card *card)
617 struct qeth_ipaddr *addr;
620 hash_for_each(card->ip_htable, i, addr, hnode) {
621 if (addr->type != QETH_IP_TYPE_NORMAL)
623 if (qeth_l3_is_addr_covered_by_ipato(card, addr))
624 addr->set_flags |= QETH_IPA_SETIP_TAKEOVER_FLAG;
626 addr->set_flags &= ~QETH_IPA_SETIP_TAKEOVER_FLAG;
630 static void qeth_l3_clear_ipato_list(struct qeth_card *card)
632 struct qeth_ipato_entry *ipatoe, *tmp;
634 spin_lock_bh(&card->ip_lock);
636 list_for_each_entry_safe(ipatoe, tmp, &card->ipato.entries, entry) {
637 list_del(&ipatoe->entry);
641 qeth_l3_update_ipato(card);
642 spin_unlock_bh(&card->ip_lock);
645 int qeth_l3_add_ipato_entry(struct qeth_card *card,
646 struct qeth_ipato_entry *new)
648 struct qeth_ipato_entry *ipatoe;
651 QETH_CARD_TEXT(card, 2, "addipato");
653 spin_lock_bh(&card->ip_lock);
655 list_for_each_entry(ipatoe, &card->ipato.entries, entry) {
656 if (ipatoe->proto != new->proto)
658 if (!memcmp(ipatoe->addr, new->addr,
659 (ipatoe->proto == QETH_PROT_IPV4)? 4:16) &&
660 (ipatoe->mask_bits == new->mask_bits)) {
667 list_add_tail(&new->entry, &card->ipato.entries);
668 qeth_l3_update_ipato(card);
671 spin_unlock_bh(&card->ip_lock);
676 void qeth_l3_del_ipato_entry(struct qeth_card *card,
677 enum qeth_prot_versions proto, u8 *addr, int mask_bits)
679 struct qeth_ipato_entry *ipatoe, *tmp;
681 QETH_CARD_TEXT(card, 2, "delipato");
683 spin_lock_bh(&card->ip_lock);
685 list_for_each_entry_safe(ipatoe, tmp, &card->ipato.entries, entry) {
686 if (ipatoe->proto != proto)
688 if (!memcmp(ipatoe->addr, addr,
689 (proto == QETH_PROT_IPV4)? 4:16) &&
690 (ipatoe->mask_bits == mask_bits)) {
691 list_del(&ipatoe->entry);
692 qeth_l3_update_ipato(card);
697 spin_unlock_bh(&card->ip_lock);
701 * VIPA related functions
703 int qeth_l3_add_vipa(struct qeth_card *card, enum qeth_prot_versions proto,
706 struct qeth_ipaddr *ipaddr;
709 ipaddr = qeth_l3_get_addr_buffer(proto);
711 if (proto == QETH_PROT_IPV4) {
712 QETH_CARD_TEXT(card, 2, "addvipa4");
713 memcpy(&ipaddr->u.a4.addr, addr, 4);
714 ipaddr->u.a4.mask = 0;
715 } else if (proto == QETH_PROT_IPV6) {
716 QETH_CARD_TEXT(card, 2, "addvipa6");
717 memcpy(&ipaddr->u.a6.addr, addr, 16);
718 ipaddr->u.a6.pfxlen = 0;
720 ipaddr->type = QETH_IP_TYPE_VIPA;
721 ipaddr->set_flags = QETH_IPA_SETIP_VIPA_FLAG;
722 ipaddr->del_flags = QETH_IPA_DELIP_VIPA_FLAG;
726 spin_lock_bh(&card->ip_lock);
728 if (qeth_l3_ip_from_hash(card, ipaddr))
731 qeth_l3_add_ip(card, ipaddr);
733 spin_unlock_bh(&card->ip_lock);
740 void qeth_l3_del_vipa(struct qeth_card *card, enum qeth_prot_versions proto,
743 struct qeth_ipaddr *ipaddr;
745 ipaddr = qeth_l3_get_addr_buffer(proto);
747 if (proto == QETH_PROT_IPV4) {
748 QETH_CARD_TEXT(card, 2, "delvipa4");
749 memcpy(&ipaddr->u.a4.addr, addr, 4);
750 ipaddr->u.a4.mask = 0;
751 } else if (proto == QETH_PROT_IPV6) {
752 QETH_CARD_TEXT(card, 2, "delvipa6");
753 memcpy(&ipaddr->u.a6.addr, addr, 16);
754 ipaddr->u.a6.pfxlen = 0;
756 ipaddr->type = QETH_IP_TYPE_VIPA;
760 spin_lock_bh(&card->ip_lock);
761 qeth_l3_delete_ip(card, ipaddr);
762 spin_unlock_bh(&card->ip_lock);
768 * proxy ARP related functions
770 int qeth_l3_add_rxip(struct qeth_card *card, enum qeth_prot_versions proto,
773 struct qeth_ipaddr *ipaddr;
776 ipaddr = qeth_l3_get_addr_buffer(proto);
778 if (proto == QETH_PROT_IPV4) {
779 QETH_CARD_TEXT(card, 2, "addrxip4");
780 memcpy(&ipaddr->u.a4.addr, addr, 4);
781 ipaddr->u.a4.mask = 0;
782 } else if (proto == QETH_PROT_IPV6) {
783 QETH_CARD_TEXT(card, 2, "addrxip6");
784 memcpy(&ipaddr->u.a6.addr, addr, 16);
785 ipaddr->u.a6.pfxlen = 0;
788 ipaddr->type = QETH_IP_TYPE_RXIP;
789 ipaddr->set_flags = QETH_IPA_SETIP_TAKEOVER_FLAG;
790 ipaddr->del_flags = 0;
794 spin_lock_bh(&card->ip_lock);
796 if (qeth_l3_ip_from_hash(card, ipaddr))
799 qeth_l3_add_ip(card, ipaddr);
801 spin_unlock_bh(&card->ip_lock);
808 void qeth_l3_del_rxip(struct qeth_card *card, enum qeth_prot_versions proto,
811 struct qeth_ipaddr *ipaddr;
813 ipaddr = qeth_l3_get_addr_buffer(proto);
815 if (proto == QETH_PROT_IPV4) {
816 QETH_CARD_TEXT(card, 2, "delrxip4");
817 memcpy(&ipaddr->u.a4.addr, addr, 4);
818 ipaddr->u.a4.mask = 0;
819 } else if (proto == QETH_PROT_IPV6) {
820 QETH_CARD_TEXT(card, 2, "delrxip6");
821 memcpy(&ipaddr->u.a6.addr, addr, 16);
822 ipaddr->u.a6.pfxlen = 0;
824 ipaddr->type = QETH_IP_TYPE_RXIP;
828 spin_lock_bh(&card->ip_lock);
829 qeth_l3_delete_ip(card, ipaddr);
830 spin_unlock_bh(&card->ip_lock);
835 static int qeth_l3_register_addr_entry(struct qeth_card *card,
836 struct qeth_ipaddr *addr)
843 if (addr->proto == QETH_PROT_IPV4) {
844 QETH_CARD_TEXT(card, 2, "setaddr4");
845 QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int));
846 } else if (addr->proto == QETH_PROT_IPV6) {
847 QETH_CARD_TEXT(card, 2, "setaddr6");
848 QETH_CARD_HEX(card, 3, &addr->u.a6.addr, 8);
849 QETH_CARD_HEX(card, 3, ((char *)&addr->u.a6.addr) + 8, 8);
851 QETH_CARD_TEXT(card, 2, "setaddr?");
852 QETH_CARD_HEX(card, 3, addr, sizeof(struct qeth_ipaddr));
855 if (addr->is_multicast)
856 rc = qeth_l3_send_setdelmc(card, addr, IPA_CMD_SETIPM);
858 rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_SETIP,
861 QETH_CARD_TEXT(card, 2, "failed");
862 } while ((--cnt > 0) && rc);
864 QETH_CARD_TEXT(card, 2, "FAILED");
865 qeth_l3_ipaddr_to_string(addr->proto, (u8 *)&addr->u, buf);
866 dev_warn(&card->gdev->dev,
867 "Registering IP address %s failed\n", buf);
872 static int qeth_l3_deregister_addr_entry(struct qeth_card *card,
873 struct qeth_ipaddr *addr)
877 if (addr->proto == QETH_PROT_IPV4) {
878 QETH_CARD_TEXT(card, 2, "deladdr4");
879 QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int));
880 } else if (addr->proto == QETH_PROT_IPV6) {
881 QETH_CARD_TEXT(card, 2, "deladdr6");
882 QETH_CARD_HEX(card, 3, &addr->u.a6.addr, 8);
883 QETH_CARD_HEX(card, 3, ((char *)&addr->u.a6.addr) + 8, 8);
885 QETH_CARD_TEXT(card, 2, "deladdr?");
886 QETH_CARD_HEX(card, 3, addr, sizeof(struct qeth_ipaddr));
888 if (addr->is_multicast)
889 rc = qeth_l3_send_setdelmc(card, addr, IPA_CMD_DELIPM);
891 rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_DELIP,
894 QETH_CARD_TEXT(card, 2, "failed");
899 static u8 qeth_l3_get_qeth_hdr_flags4(int cast_type)
901 if (cast_type == RTN_MULTICAST)
902 return QETH_CAST_MULTICAST;
903 if (cast_type == RTN_BROADCAST)
904 return QETH_CAST_BROADCAST;
905 return QETH_CAST_UNICAST;
908 static u8 qeth_l3_get_qeth_hdr_flags6(int cast_type)
910 u8 ct = QETH_HDR_PASSTHRU | QETH_HDR_IPV6;
911 if (cast_type == RTN_MULTICAST)
912 return ct | QETH_CAST_MULTICAST;
913 if (cast_type == RTN_ANYCAST)
914 return ct | QETH_CAST_ANYCAST;
915 if (cast_type == RTN_BROADCAST)
916 return ct | QETH_CAST_BROADCAST;
917 return ct | QETH_CAST_UNICAST;
920 static int qeth_l3_setadapter_parms(struct qeth_card *card)
924 QETH_DBF_TEXT(SETUP, 2, "setadprm");
926 if (qeth_adp_supported(card, IPA_SETADP_ALTER_MAC_ADDRESS)) {
927 rc = qeth_setadpparms_change_macaddr(card);
929 dev_warn(&card->gdev->dev, "Reading the adapter MAC"
930 " address failed\n");
936 static int qeth_l3_send_simple_setassparms_ipv6(struct qeth_card *card,
937 enum qeth_ipa_funcs ipa_func, __u16 cmd_code)
940 struct qeth_cmd_buffer *iob;
942 QETH_CARD_TEXT(card, 4, "simassp6");
943 iob = qeth_get_setassparms_cmd(card, ipa_func, cmd_code,
947 rc = qeth_send_setassparms(card, iob, 0, 0,
948 qeth_setassparms_cb, NULL);
952 static int qeth_l3_start_ipa_arp_processing(struct qeth_card *card)
956 QETH_CARD_TEXT(card, 3, "ipaarp");
958 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
959 dev_info(&card->gdev->dev,
960 "ARP processing not supported on %s!\n",
961 QETH_CARD_IFNAME(card));
964 rc = qeth_send_simple_setassparms(card, IPA_ARP_PROCESSING,
965 IPA_CMD_ASS_START, 0);
967 dev_warn(&card->gdev->dev,
968 "Starting ARP processing support for %s failed\n",
969 QETH_CARD_IFNAME(card));
974 static int qeth_l3_start_ipa_source_mac(struct qeth_card *card)
978 QETH_CARD_TEXT(card, 3, "stsrcmac");
980 if (!qeth_is_supported(card, IPA_SOURCE_MAC)) {
981 dev_info(&card->gdev->dev,
982 "Inbound source MAC-address not supported on %s\n",
983 QETH_CARD_IFNAME(card));
987 rc = qeth_send_simple_setassparms(card, IPA_SOURCE_MAC,
988 IPA_CMD_ASS_START, 0);
990 dev_warn(&card->gdev->dev,
991 "Starting source MAC-address support for %s failed\n",
992 QETH_CARD_IFNAME(card));
996 static int qeth_l3_start_ipa_vlan(struct qeth_card *card)
1000 QETH_CARD_TEXT(card, 3, "strtvlan");
1002 if (!qeth_is_supported(card, IPA_FULL_VLAN)) {
1003 dev_info(&card->gdev->dev,
1004 "VLAN not supported on %s\n", QETH_CARD_IFNAME(card));
1008 rc = qeth_send_simple_setassparms(card, IPA_VLAN_PRIO,
1009 IPA_CMD_ASS_START, 0);
1011 dev_warn(&card->gdev->dev,
1012 "Starting VLAN support for %s failed\n",
1013 QETH_CARD_IFNAME(card));
1015 dev_info(&card->gdev->dev, "VLAN enabled\n");
1020 static int qeth_l3_start_ipa_multicast(struct qeth_card *card)
1024 QETH_CARD_TEXT(card, 3, "stmcast");
1026 if (!qeth_is_supported(card, IPA_MULTICASTING)) {
1027 dev_info(&card->gdev->dev,
1028 "Multicast not supported on %s\n",
1029 QETH_CARD_IFNAME(card));
1033 rc = qeth_send_simple_setassparms(card, IPA_MULTICASTING,
1034 IPA_CMD_ASS_START, 0);
1036 dev_warn(&card->gdev->dev,
1037 "Starting multicast support for %s failed\n",
1038 QETH_CARD_IFNAME(card));
1040 dev_info(&card->gdev->dev, "Multicast enabled\n");
1041 card->dev->flags |= IFF_MULTICAST;
1046 static int qeth_l3_softsetup_ipv6(struct qeth_card *card)
1050 QETH_CARD_TEXT(card, 3, "softipv6");
1052 rc = qeth_query_ipassists(card, QETH_PROT_IPV6);
1054 dev_err(&card->gdev->dev,
1055 "Activating IPv6 support for %s failed\n",
1056 QETH_CARD_IFNAME(card));
1060 if (card->info.type == QETH_CARD_TYPE_IQD)
1063 rc = qeth_send_simple_setassparms(card, IPA_IPV6,
1064 IPA_CMD_ASS_START, 3);
1066 dev_err(&card->gdev->dev,
1067 "Activating IPv6 support for %s failed\n",
1068 QETH_CARD_IFNAME(card));
1071 rc = qeth_l3_send_simple_setassparms_ipv6(card, IPA_IPV6,
1074 dev_err(&card->gdev->dev,
1075 "Activating IPv6 support for %s failed\n",
1076 QETH_CARD_IFNAME(card));
1079 rc = qeth_l3_send_simple_setassparms_ipv6(card, IPA_PASSTHRU,
1082 dev_warn(&card->gdev->dev,
1083 "Enabling the passthrough mode for %s failed\n",
1084 QETH_CARD_IFNAME(card));
1088 dev_info(&card->gdev->dev, "IPV6 enabled\n");
1092 static int qeth_l3_start_ipa_ipv6(struct qeth_card *card)
1094 QETH_CARD_TEXT(card, 3, "strtipv6");
1096 if (!qeth_is_supported(card, IPA_IPV6)) {
1097 dev_info(&card->gdev->dev,
1098 "IPv6 not supported on %s\n", QETH_CARD_IFNAME(card));
1101 return qeth_l3_softsetup_ipv6(card);
1104 static int qeth_l3_start_ipa_broadcast(struct qeth_card *card)
1108 QETH_CARD_TEXT(card, 3, "stbrdcst");
1109 card->info.broadcast_capable = 0;
1110 if (!qeth_is_supported(card, IPA_FILTERING)) {
1111 dev_info(&card->gdev->dev,
1112 "Broadcast not supported on %s\n",
1113 QETH_CARD_IFNAME(card));
1117 rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
1118 IPA_CMD_ASS_START, 0);
1120 dev_warn(&card->gdev->dev, "Enabling broadcast filtering for "
1121 "%s failed\n", QETH_CARD_IFNAME(card));
1125 rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
1126 IPA_CMD_ASS_CONFIGURE, 1);
1128 dev_warn(&card->gdev->dev,
1129 "Setting up broadcast filtering for %s failed\n",
1130 QETH_CARD_IFNAME(card));
1133 card->info.broadcast_capable = QETH_BROADCAST_WITH_ECHO;
1134 dev_info(&card->gdev->dev, "Broadcast enabled\n");
1135 rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
1136 IPA_CMD_ASS_ENABLE, 1);
1138 dev_warn(&card->gdev->dev, "Setting up broadcast echo "
1139 "filtering for %s failed\n", QETH_CARD_IFNAME(card));
1142 card->info.broadcast_capable = QETH_BROADCAST_WITHOUT_ECHO;
1144 if (card->info.broadcast_capable)
1145 card->dev->flags |= IFF_BROADCAST;
1147 card->dev->flags &= ~IFF_BROADCAST;
1151 static int qeth_l3_start_ipassists(struct qeth_card *card)
1153 QETH_CARD_TEXT(card, 3, "strtipas");
1155 if (qeth_set_access_ctrl_online(card, 0))
1157 qeth_l3_start_ipa_arp_processing(card); /* go on*/
1158 qeth_l3_start_ipa_source_mac(card); /* go on*/
1159 qeth_l3_start_ipa_vlan(card); /* go on*/
1160 qeth_l3_start_ipa_multicast(card); /* go on*/
1161 qeth_l3_start_ipa_ipv6(card); /* go on*/
1162 qeth_l3_start_ipa_broadcast(card); /* go on*/
1166 static int qeth_l3_iqd_read_initial_mac_cb(struct qeth_card *card,
1167 struct qeth_reply *reply, unsigned long data)
1169 struct qeth_ipa_cmd *cmd;
1171 cmd = (struct qeth_ipa_cmd *) data;
1172 if (cmd->hdr.return_code == 0)
1173 ether_addr_copy(card->dev->dev_addr,
1174 cmd->data.create_destroy_addr.unique_id);
1176 eth_random_addr(card->dev->dev_addr);
1181 static int qeth_l3_iqd_read_initial_mac(struct qeth_card *card)
1184 struct qeth_cmd_buffer *iob;
1185 struct qeth_ipa_cmd *cmd;
1187 QETH_DBF_TEXT(SETUP, 2, "hsrmac");
1189 iob = qeth_get_ipacmd_buffer(card, IPA_CMD_CREATE_ADDR,
1193 cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
1194 *((__u16 *) &cmd->data.create_destroy_addr.unique_id[6]) =
1195 card->info.unique_id;
1197 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_iqd_read_initial_mac_cb,
1202 static int qeth_l3_get_unique_id_cb(struct qeth_card *card,
1203 struct qeth_reply *reply, unsigned long data)
1205 struct qeth_ipa_cmd *cmd;
1207 cmd = (struct qeth_ipa_cmd *) data;
1208 if (cmd->hdr.return_code == 0)
1209 card->info.unique_id = *((__u16 *)
1210 &cmd->data.create_destroy_addr.unique_id[6]);
1212 card->info.unique_id = UNIQUE_ID_IF_CREATE_ADDR_FAILED |
1213 UNIQUE_ID_NOT_BY_CARD;
1214 dev_warn(&card->gdev->dev, "The network adapter failed to "
1215 "generate a unique ID\n");
1220 static int qeth_l3_get_unique_id(struct qeth_card *card)
1223 struct qeth_cmd_buffer *iob;
1224 struct qeth_ipa_cmd *cmd;
1226 QETH_DBF_TEXT(SETUP, 2, "guniqeid");
1228 if (!qeth_is_supported(card, IPA_IPV6)) {
1229 card->info.unique_id = UNIQUE_ID_IF_CREATE_ADDR_FAILED |
1230 UNIQUE_ID_NOT_BY_CARD;
1234 iob = qeth_get_ipacmd_buffer(card, IPA_CMD_CREATE_ADDR,
1238 cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
1239 *((__u16 *) &cmd->data.create_destroy_addr.unique_id[6]) =
1240 card->info.unique_id;
1242 rc = qeth_send_ipa_cmd(card, iob, qeth_l3_get_unique_id_cb, NULL);
1247 qeth_diags_trace_cb(struct qeth_card *card, struct qeth_reply *reply,
1250 struct qeth_ipa_cmd *cmd;
1253 QETH_DBF_TEXT(SETUP, 2, "diastrcb");
1255 cmd = (struct qeth_ipa_cmd *)data;
1256 rc = cmd->hdr.return_code;
1258 QETH_CARD_TEXT_(card, 2, "dxter%x", rc);
1259 switch (cmd->data.diagass.action) {
1260 case QETH_DIAGS_CMD_TRACE_QUERY:
1262 case QETH_DIAGS_CMD_TRACE_DISABLE:
1265 case IPA_RC_INVALID_SUBCMD:
1266 card->info.promisc_mode = SET_PROMISC_MODE_OFF;
1267 dev_info(&card->gdev->dev, "The HiperSockets network "
1268 "traffic analyzer is deactivated\n");
1274 case QETH_DIAGS_CMD_TRACE_ENABLE:
1277 card->info.promisc_mode = SET_PROMISC_MODE_ON;
1278 dev_info(&card->gdev->dev, "The HiperSockets network "
1279 "traffic analyzer is activated\n");
1281 case IPA_RC_HARDWARE_AUTH_ERROR:
1282 dev_warn(&card->gdev->dev, "The device is not "
1283 "authorized to run as a HiperSockets network "
1284 "traffic analyzer\n");
1286 case IPA_RC_TRACE_ALREADY_ACTIVE:
1287 dev_warn(&card->gdev->dev, "A HiperSockets "
1288 "network traffic analyzer is already "
1289 "active in the HiperSockets LAN\n");
1296 QETH_DBF_MESSAGE(2, "Unknown sniffer action (0x%04x) on %s\n",
1297 cmd->data.diagass.action, QETH_CARD_IFNAME(card));
1304 qeth_diags_trace(struct qeth_card *card, enum qeth_diags_trace_cmds diags_cmd)
1306 struct qeth_cmd_buffer *iob;
1307 struct qeth_ipa_cmd *cmd;
1309 QETH_DBF_TEXT(SETUP, 2, "diagtrac");
1311 iob = qeth_get_ipacmd_buffer(card, IPA_CMD_SET_DIAG_ASS, 0);
1314 cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
1315 cmd->data.diagass.subcmd_len = 16;
1316 cmd->data.diagass.subcmd = QETH_DIAGS_CMD_TRACE;
1317 cmd->data.diagass.type = QETH_DIAGS_TYPE_HIPERSOCKET;
1318 cmd->data.diagass.action = diags_cmd;
1319 return qeth_send_ipa_cmd(card, iob, qeth_diags_trace_cb, NULL);
1323 qeth_l3_add_mc_to_hash(struct qeth_card *card, struct in_device *in4_dev)
1325 struct ip_mc_list *im4;
1326 struct qeth_ipaddr *tmp, *ipm;
1328 QETH_CARD_TEXT(card, 4, "addmc");
1330 tmp = qeth_l3_get_addr_buffer(QETH_PROT_IPV4);
1334 for (im4 = rcu_dereference(in4_dev->mc_list); im4 != NULL;
1335 im4 = rcu_dereference(im4->next_rcu)) {
1336 ip_eth_mc_map(im4->multiaddr, tmp->mac);
1337 tmp->u.a4.addr = be32_to_cpu(im4->multiaddr);
1338 tmp->is_multicast = 1;
1340 ipm = qeth_l3_ip_from_hash(card, tmp);
1342 ipm->disp_flag = QETH_DISP_ADDR_DO_NOTHING;
1344 ipm = qeth_l3_get_addr_buffer(QETH_PROT_IPV4);
1347 ether_addr_copy(ipm->mac, tmp->mac);
1348 ipm->u.a4.addr = be32_to_cpu(im4->multiaddr);
1349 ipm->is_multicast = 1;
1350 ipm->disp_flag = QETH_DISP_ADDR_ADD;
1351 hash_add(card->ip_mc_htable,
1352 &ipm->hnode, qeth_l3_ipaddr_hash(ipm));
1359 /* called with rcu_read_lock */
1360 static void qeth_l3_add_vlan_mc(struct qeth_card *card)
1362 struct in_device *in_dev;
1365 QETH_CARD_TEXT(card, 4, "addmcvl");
1367 if (!qeth_is_supported(card, IPA_FULL_VLAN))
1370 for_each_set_bit(vid, card->active_vlans, VLAN_N_VID) {
1371 struct net_device *netdev;
1373 netdev = __vlan_find_dev_deep_rcu(card->dev, htons(ETH_P_8021Q),
1375 if (netdev == NULL ||
1376 !(netdev->flags & IFF_UP))
1378 in_dev = __in_dev_get_rcu(netdev);
1381 qeth_l3_add_mc_to_hash(card, in_dev);
1385 static void qeth_l3_add_multicast_ipv4(struct qeth_card *card)
1387 struct in_device *in4_dev;
1389 QETH_CARD_TEXT(card, 4, "chkmcv4");
1392 in4_dev = __in_dev_get_rcu(card->dev);
1393 if (in4_dev == NULL)
1395 qeth_l3_add_mc_to_hash(card, in4_dev);
1396 qeth_l3_add_vlan_mc(card);
1401 static void qeth_l3_add_mc6_to_hash(struct qeth_card *card,
1402 struct inet6_dev *in6_dev)
1404 struct qeth_ipaddr *ipm;
1405 struct ifmcaddr6 *im6;
1406 struct qeth_ipaddr *tmp;
1408 QETH_CARD_TEXT(card, 4, "addmc6");
1410 tmp = qeth_l3_get_addr_buffer(QETH_PROT_IPV6);
1414 for (im6 = in6_dev->mc_list; im6 != NULL; im6 = im6->next) {
1415 ipv6_eth_mc_map(&im6->mca_addr, tmp->mac);
1416 memcpy(&tmp->u.a6.addr, &im6->mca_addr.s6_addr,
1417 sizeof(struct in6_addr));
1418 tmp->is_multicast = 1;
1420 ipm = qeth_l3_ip_from_hash(card, tmp);
1422 ipm->disp_flag = QETH_DISP_ADDR_DO_NOTHING;
1426 ipm = qeth_l3_get_addr_buffer(QETH_PROT_IPV6);
1430 ether_addr_copy(ipm->mac, tmp->mac);
1431 memcpy(&ipm->u.a6.addr, &im6->mca_addr.s6_addr,
1432 sizeof(struct in6_addr));
1433 ipm->is_multicast = 1;
1434 ipm->disp_flag = QETH_DISP_ADDR_ADD;
1435 hash_add(card->ip_mc_htable,
1436 &ipm->hnode, qeth_l3_ipaddr_hash(ipm));
1442 /* called with rcu_read_lock */
1443 static void qeth_l3_add_vlan_mc6(struct qeth_card *card)
1445 struct inet6_dev *in_dev;
1448 QETH_CARD_TEXT(card, 4, "admc6vl");
1450 if (!qeth_is_supported(card, IPA_FULL_VLAN))
1453 for_each_set_bit(vid, card->active_vlans, VLAN_N_VID) {
1454 struct net_device *netdev;
1456 netdev = __vlan_find_dev_deep_rcu(card->dev, htons(ETH_P_8021Q),
1458 if (netdev == NULL ||
1459 !(netdev->flags & IFF_UP))
1461 in_dev = in6_dev_get(netdev);
1464 read_lock_bh(&in_dev->lock);
1465 qeth_l3_add_mc6_to_hash(card, in_dev);
1466 read_unlock_bh(&in_dev->lock);
1467 in6_dev_put(in_dev);
1471 static void qeth_l3_add_multicast_ipv6(struct qeth_card *card)
1473 struct inet6_dev *in6_dev;
1475 QETH_CARD_TEXT(card, 4, "chkmcv6");
1477 if (!qeth_is_supported(card, IPA_IPV6))
1479 in6_dev = in6_dev_get(card->dev);
1484 read_lock_bh(&in6_dev->lock);
1485 qeth_l3_add_mc6_to_hash(card, in6_dev);
1486 qeth_l3_add_vlan_mc6(card);
1487 read_unlock_bh(&in6_dev->lock);
1489 in6_dev_put(in6_dev);
1492 static void qeth_l3_free_vlan_addresses4(struct qeth_card *card,
1495 struct in_device *in_dev;
1496 struct in_ifaddr *ifa;
1497 struct qeth_ipaddr *addr;
1498 struct net_device *netdev;
1500 QETH_CARD_TEXT(card, 4, "frvaddr4");
1502 netdev = __vlan_find_dev_deep_rcu(card->dev, htons(ETH_P_8021Q), vid);
1505 in_dev = in_dev_get(netdev);
1509 addr = qeth_l3_get_addr_buffer(QETH_PROT_IPV4);
1513 spin_lock_bh(&card->ip_lock);
1515 for (ifa = in_dev->ifa_list; ifa; ifa = ifa->ifa_next) {
1516 addr->u.a4.addr = be32_to_cpu(ifa->ifa_address);
1517 addr->u.a4.mask = be32_to_cpu(ifa->ifa_mask);
1518 addr->type = QETH_IP_TYPE_NORMAL;
1519 qeth_l3_delete_ip(card, addr);
1522 spin_unlock_bh(&card->ip_lock);
1529 static void qeth_l3_free_vlan_addresses6(struct qeth_card *card,
1532 struct inet6_dev *in6_dev;
1533 struct inet6_ifaddr *ifa;
1534 struct qeth_ipaddr *addr;
1535 struct net_device *netdev;
1537 QETH_CARD_TEXT(card, 4, "frvaddr6");
1539 netdev = __vlan_find_dev_deep_rcu(card->dev, htons(ETH_P_8021Q), vid);
1543 in6_dev = in6_dev_get(netdev);
1547 addr = qeth_l3_get_addr_buffer(QETH_PROT_IPV6);
1551 spin_lock_bh(&card->ip_lock);
1553 list_for_each_entry(ifa, &in6_dev->addr_list, if_list) {
1554 memcpy(&addr->u.a6.addr, &ifa->addr,
1555 sizeof(struct in6_addr));
1556 addr->u.a6.pfxlen = ifa->prefix_len;
1557 addr->type = QETH_IP_TYPE_NORMAL;
1558 qeth_l3_delete_ip(card, addr);
1561 spin_unlock_bh(&card->ip_lock);
1565 in6_dev_put(in6_dev);
1568 static void qeth_l3_free_vlan_addresses(struct qeth_card *card,
1572 qeth_l3_free_vlan_addresses4(card, vid);
1573 qeth_l3_free_vlan_addresses6(card, vid);
1577 static int qeth_l3_vlan_rx_add_vid(struct net_device *dev,
1578 __be16 proto, u16 vid)
1580 struct qeth_card *card = dev->ml_priv;
1582 set_bit(vid, card->active_vlans);
1586 static int qeth_l3_vlan_rx_kill_vid(struct net_device *dev,
1587 __be16 proto, u16 vid)
1589 struct qeth_card *card = dev->ml_priv;
1591 QETH_CARD_TEXT_(card, 4, "kid:%d", vid);
1593 if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) {
1594 QETH_CARD_TEXT(card, 3, "kidREC");
1597 /* unregister IP addresses of vlan device */
1598 qeth_l3_free_vlan_addresses(card, vid);
1599 clear_bit(vid, card->active_vlans);
1600 qeth_l3_set_rx_mode(dev);
1604 static void qeth_l3_rebuild_skb(struct qeth_card *card, struct sk_buff *skb,
1605 struct qeth_hdr *hdr)
1607 if (!(hdr->hdr.l3.flags & QETH_HDR_PASSTHRU)) {
1608 u16 prot = (hdr->hdr.l3.flags & QETH_HDR_IPV6) ? ETH_P_IPV6 :
1610 unsigned char tg_addr[ETH_ALEN];
1612 skb_reset_network_header(skb);
1613 switch (hdr->hdr.l3.flags & QETH_HDR_CAST_MASK) {
1614 case QETH_CAST_MULTICAST:
1615 if (prot == ETH_P_IP)
1616 ip_eth_mc_map(ip_hdr(skb)->daddr, tg_addr);
1618 ipv6_eth_mc_map(&ipv6_hdr(skb)->daddr, tg_addr);
1620 card->stats.multicast++;
1621 skb->pkt_type = PACKET_MULTICAST;
1623 case QETH_CAST_BROADCAST:
1624 ether_addr_copy(tg_addr, card->dev->broadcast);
1625 card->stats.multicast++;
1626 skb->pkt_type = PACKET_BROADCAST;
1628 case QETH_CAST_UNICAST:
1629 case QETH_CAST_ANYCAST:
1630 case QETH_CAST_NOCAST:
1632 if (card->options.sniffer)
1633 skb->pkt_type = PACKET_OTHERHOST;
1635 skb->pkt_type = PACKET_HOST;
1636 ether_addr_copy(tg_addr, card->dev->dev_addr);
1638 if (hdr->hdr.l3.ext_flags & QETH_HDR_EXT_SRC_MAC_ADDR)
1639 card->dev->header_ops->create(skb, card->dev, prot,
1640 tg_addr, &hdr->hdr.l3.dest_addr[2],
1641 card->dev->addr_len);
1643 card->dev->header_ops->create(skb, card->dev, prot,
1644 tg_addr, "FAKELL", card->dev->addr_len);
1647 skb->protocol = eth_type_trans(skb, card->dev);
1649 /* copy VLAN tag from hdr into skb */
1650 if (!card->options.sniffer &&
1651 (hdr->hdr.l3.ext_flags & (QETH_HDR_EXT_VLAN_FRAME |
1652 QETH_HDR_EXT_INCLUDE_VLAN_TAG))) {
1653 u16 tag = (hdr->hdr.l3.ext_flags & QETH_HDR_EXT_VLAN_FRAME) ?
1654 hdr->hdr.l3.vlan_id :
1655 *((u16 *)&hdr->hdr.l3.dest_addr[12]);
1656 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), tag);
1659 if (card->dev->features & NETIF_F_RXCSUM) {
1660 if ((hdr->hdr.l3.ext_flags &
1661 (QETH_HDR_EXT_CSUM_HDR_REQ |
1662 QETH_HDR_EXT_CSUM_TRANSP_REQ)) ==
1663 (QETH_HDR_EXT_CSUM_HDR_REQ |
1664 QETH_HDR_EXT_CSUM_TRANSP_REQ))
1665 skb->ip_summed = CHECKSUM_UNNECESSARY;
1667 skb->ip_summed = CHECKSUM_NONE;
1669 skb->ip_summed = CHECKSUM_NONE;
1672 static int qeth_l3_process_inbound_buffer(struct qeth_card *card,
1673 int budget, int *done)
1676 struct sk_buff *skb;
1677 struct qeth_hdr *hdr;
1682 WARN_ON_ONCE(!budget);
1684 skb = qeth_core_get_next_skb(card,
1685 &card->qdio.in_q->bufs[card->rx.b_index],
1686 &card->rx.b_element, &card->rx.e_offset, &hdr);
1691 skb->dev = card->dev;
1692 switch (hdr->hdr.l3.id) {
1693 case QETH_HEADER_TYPE_LAYER3:
1694 magic = *(__u16 *)skb->data;
1695 if ((card->info.type == QETH_CARD_TYPE_IQD) &&
1696 (magic == ETH_P_AF_IUCV)) {
1697 skb->protocol = cpu_to_be16(ETH_P_AF_IUCV);
1698 skb->pkt_type = PACKET_HOST;
1699 skb->mac_header = NET_SKB_PAD;
1700 skb->dev = card->dev;
1702 card->dev->header_ops->create(skb, card->dev, 0,
1703 card->dev->dev_addr, "FAKELL",
1704 card->dev->addr_len);
1705 netif_receive_skb(skb);
1707 qeth_l3_rebuild_skb(card, skb, hdr);
1709 napi_gro_receive(&card->napi, skb);
1712 case QETH_HEADER_TYPE_LAYER2: /* for HiperSockets sniffer */
1713 skb->pkt_type = PACKET_HOST;
1714 skb->protocol = eth_type_trans(skb, skb->dev);
1716 netif_receive_skb(skb);
1719 dev_kfree_skb_any(skb);
1720 QETH_CARD_TEXT(card, 3, "inbunkno");
1721 QETH_DBF_HEX(CTRL, 3, hdr, QETH_DBF_CTRL_LEN);
1726 card->stats.rx_packets++;
1727 card->stats.rx_bytes += len;
1732 static int qeth_l3_verify_vlan_dev(struct net_device *dev,
1733 struct qeth_card *card)
1738 for_each_set_bit(vid, card->active_vlans, VLAN_N_VID) {
1739 struct net_device *netdev;
1742 netdev = __vlan_find_dev_deep_rcu(card->dev, htons(ETH_P_8021Q),
1745 if (netdev == dev) {
1746 rc = QETH_VLAN_CARD;
1751 if (rc && !(vlan_dev_real_dev(dev)->ml_priv == (void *)card))
1757 static int qeth_l3_verify_dev(struct net_device *dev)
1759 struct qeth_card *card;
1761 unsigned long flags;
1763 read_lock_irqsave(&qeth_core_card_list.rwlock, flags);
1764 list_for_each_entry(card, &qeth_core_card_list.list, list) {
1765 if (card->dev == dev) {
1766 rc = QETH_REAL_CARD;
1769 rc = qeth_l3_verify_vlan_dev(dev, card);
1773 read_unlock_irqrestore(&qeth_core_card_list.rwlock, flags);
1778 static struct qeth_card *qeth_l3_get_card_from_dev(struct net_device *dev)
1780 struct qeth_card *card = NULL;
1783 rc = qeth_l3_verify_dev(dev);
1784 if (rc == QETH_REAL_CARD)
1785 card = dev->ml_priv;
1786 else if (rc == QETH_VLAN_CARD)
1787 card = vlan_dev_real_dev(dev)->ml_priv;
1788 if (card && card->options.layer2)
1791 QETH_CARD_TEXT_(card, 4, "%d", rc);
1795 static void qeth_l3_stop_card(struct qeth_card *card, int recovery_mode)
1797 QETH_DBF_TEXT(SETUP, 2, "stopcard");
1798 QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
1800 qeth_set_allowed_threads(card, 0, 1);
1801 if (card->options.sniffer &&
1802 (card->info.promisc_mode == SET_PROMISC_MODE_ON))
1803 qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_DISABLE);
1804 if (card->read.state == CH_STATE_UP &&
1805 card->write.state == CH_STATE_UP &&
1806 (card->state == CARD_STATE_UP)) {
1808 qeth_l3_stop(card->dev);
1811 dev_close(card->dev);
1814 card->state = CARD_STATE_SOFTSETUP;
1816 if (card->state == CARD_STATE_SOFTSETUP) {
1817 qeth_l3_clear_ip_htable(card, 1);
1818 qeth_clear_ipacmd_list(card);
1819 card->state = CARD_STATE_HARDSETUP;
1821 if (card->state == CARD_STATE_HARDSETUP) {
1822 qeth_qdio_clear_card(card, 0);
1823 qeth_clear_qdio_buffers(card);
1824 qeth_clear_working_pool_list(card);
1825 card->state = CARD_STATE_DOWN;
1827 if (card->state == CARD_STATE_DOWN) {
1828 qeth_clear_cmd_buffers(&card->read);
1829 qeth_clear_cmd_buffers(&card->write);
1834 * test for and Switch promiscuous mode (on or off)
1835 * either for guestlan or HiperSocket Sniffer
1838 qeth_l3_handle_promisc_mode(struct qeth_card *card)
1840 struct net_device *dev = card->dev;
1842 if (((dev->flags & IFF_PROMISC) &&
1843 (card->info.promisc_mode == SET_PROMISC_MODE_ON)) ||
1844 (!(dev->flags & IFF_PROMISC) &&
1845 (card->info.promisc_mode == SET_PROMISC_MODE_OFF)))
1848 if (card->info.guestlan) { /* Guestlan trace */
1849 if (qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE))
1850 qeth_setadp_promisc_mode(card);
1851 } else if (card->options.sniffer && /* HiperSockets trace */
1852 qeth_adp_supported(card, IPA_SETADP_SET_DIAG_ASSIST)) {
1853 if (dev->flags & IFF_PROMISC) {
1854 QETH_CARD_TEXT(card, 3, "+promisc");
1855 qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_ENABLE);
1857 QETH_CARD_TEXT(card, 3, "-promisc");
1858 qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_DISABLE);
1863 static void qeth_l3_set_rx_mode(struct net_device *dev)
1865 struct qeth_card *card = dev->ml_priv;
1866 struct qeth_ipaddr *addr;
1867 struct hlist_node *tmp;
1870 QETH_CARD_TEXT(card, 3, "setmulti");
1871 if (qeth_threads_running(card, QETH_RECOVER_THREAD) &&
1872 (card->state != CARD_STATE_UP))
1874 if (!card->options.sniffer) {
1875 spin_lock_bh(&card->mclock);
1877 qeth_l3_add_multicast_ipv4(card);
1878 qeth_l3_add_multicast_ipv6(card);
1880 hash_for_each_safe(card->ip_mc_htable, i, tmp, addr, hnode) {
1881 switch (addr->disp_flag) {
1882 case QETH_DISP_ADDR_DELETE:
1883 rc = qeth_l3_deregister_addr_entry(card, addr);
1884 if (!rc || rc == IPA_RC_MC_ADDR_NOT_FOUND) {
1885 hash_del(&addr->hnode);
1889 case QETH_DISP_ADDR_ADD:
1890 rc = qeth_l3_register_addr_entry(card, addr);
1891 if (rc && rc != IPA_RC_LAN_OFFLINE) {
1892 hash_del(&addr->hnode);
1896 addr->ref_counter = 1;
1899 /* for next call to set_rx_mode(): */
1900 addr->disp_flag = QETH_DISP_ADDR_DELETE;
1904 spin_unlock_bh(&card->mclock);
1906 if (!qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE))
1909 qeth_l3_handle_promisc_mode(card);
1912 static const char *qeth_l3_arp_get_error_cause(int *rc)
1915 case QETH_IPA_ARP_RC_FAILED:
1917 return "operation failed";
1918 case QETH_IPA_ARP_RC_NOTSUPP:
1920 return "operation not supported";
1921 case QETH_IPA_ARP_RC_OUT_OF_RANGE:
1923 return "argument out of range";
1924 case QETH_IPA_ARP_RC_Q_NOTSUPP:
1926 return "query operation not supported";
1927 case QETH_IPA_ARP_RC_Q_NO_DATA:
1929 return "no query data available";
1931 return "unknown error";
1935 static int qeth_l3_arp_set_no_entries(struct qeth_card *card, int no_entries)
1940 QETH_CARD_TEXT(card, 3, "arpstnoe");
1943 * currently GuestLAN only supports the ARP assist function
1944 * IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_SET_NO_ENTRIES;
1945 * thus we say EOPNOTSUPP for this ARP function
1947 if (card->info.guestlan)
1949 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
1952 rc = qeth_send_simple_setassparms(card, IPA_ARP_PROCESSING,
1953 IPA_CMD_ASS_ARP_SET_NO_ENTRIES,
1957 QETH_DBF_MESSAGE(2, "Could not set number of ARP entries on "
1958 "%s: %s (0x%x/%d)\n", QETH_CARD_IFNAME(card),
1959 qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
1964 static __u32 get_arp_entry_size(struct qeth_card *card,
1965 struct qeth_arp_query_data *qdata,
1966 struct qeth_arp_entrytype *type, __u8 strip_entries)
1971 is_hsi = qdata->reply_bits == 5;
1972 if (type->ip == QETHARP_IP_ADDR_V4) {
1973 QETH_CARD_TEXT(card, 4, "arpev4");
1974 if (strip_entries) {
1975 rc = is_hsi ? sizeof(struct qeth_arp_qi_entry5_short) :
1976 sizeof(struct qeth_arp_qi_entry7_short);
1978 rc = is_hsi ? sizeof(struct qeth_arp_qi_entry5) :
1979 sizeof(struct qeth_arp_qi_entry7);
1981 } else if (type->ip == QETHARP_IP_ADDR_V6) {
1982 QETH_CARD_TEXT(card, 4, "arpev6");
1983 if (strip_entries) {
1985 sizeof(struct qeth_arp_qi_entry5_short_ipv6) :
1986 sizeof(struct qeth_arp_qi_entry7_short_ipv6);
1989 sizeof(struct qeth_arp_qi_entry5_ipv6) :
1990 sizeof(struct qeth_arp_qi_entry7_ipv6);
1993 QETH_CARD_TEXT(card, 4, "arpinv");
2000 static int arpentry_matches_prot(struct qeth_arp_entrytype *type, __u16 prot)
2002 return (type->ip == QETHARP_IP_ADDR_V4 && prot == QETH_PROT_IPV4) ||
2003 (type->ip == QETHARP_IP_ADDR_V6 && prot == QETH_PROT_IPV6);
2006 static int qeth_l3_arp_query_cb(struct qeth_card *card,
2007 struct qeth_reply *reply, unsigned long data)
2009 struct qeth_ipa_cmd *cmd;
2010 struct qeth_arp_query_data *qdata;
2011 struct qeth_arp_query_info *qinfo;
2014 int entrybytes_done;
2016 __u8 do_strip_entries;
2018 QETH_CARD_TEXT(card, 3, "arpquecb");
2020 qinfo = (struct qeth_arp_query_info *) reply->param;
2021 cmd = (struct qeth_ipa_cmd *) data;
2022 QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.prot_version);
2023 if (cmd->hdr.return_code) {
2024 QETH_CARD_TEXT(card, 4, "arpcberr");
2025 QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.return_code);
2028 if (cmd->data.setassparms.hdr.return_code) {
2029 cmd->hdr.return_code = cmd->data.setassparms.hdr.return_code;
2030 QETH_CARD_TEXT(card, 4, "setaperr");
2031 QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.return_code);
2034 qdata = &cmd->data.setassparms.data.query_arp;
2035 QETH_CARD_TEXT_(card, 4, "anoen%i", qdata->no_entries);
2037 do_strip_entries = (qinfo->mask_bits & QETH_QARP_STRIP_ENTRIES) > 0;
2038 stripped_bytes = do_strip_entries ? QETH_QARP_MEDIASPECIFIC_BYTES : 0;
2039 entrybytes_done = 0;
2040 for (e = 0; e < qdata->no_entries; ++e) {
2043 struct qeth_arp_entrytype *etype;
2045 cur_entry = &qdata->data + entrybytes_done;
2046 etype = &((struct qeth_arp_qi_entry5 *) cur_entry)->type;
2047 if (!arpentry_matches_prot(etype, cmd->hdr.prot_version)) {
2048 QETH_CARD_TEXT(card, 4, "pmis");
2049 QETH_CARD_TEXT_(card, 4, "%i", etype->ip);
2052 esize = get_arp_entry_size(card, qdata, etype,
2054 QETH_CARD_TEXT_(card, 5, "esz%i", esize);
2058 if ((qinfo->udata_len - qinfo->udata_offset) < esize) {
2059 QETH_CARD_TEXT_(card, 4, "qaer3%i", -ENOMEM);
2060 cmd->hdr.return_code = IPA_RC_ENOMEM;
2064 memcpy(qinfo->udata + qinfo->udata_offset,
2065 &qdata->data + entrybytes_done + stripped_bytes,
2067 entrybytes_done += esize + stripped_bytes;
2068 qinfo->udata_offset += esize;
2069 ++qinfo->no_entries;
2071 /* check if all replies received ... */
2072 if (cmd->data.setassparms.hdr.seq_no <
2073 cmd->data.setassparms.hdr.number_of_replies)
2075 QETH_CARD_TEXT_(card, 4, "nove%i", qinfo->no_entries);
2076 memcpy(qinfo->udata, &qinfo->no_entries, 4);
2077 /* keep STRIP_ENTRIES flag so the user program can distinguish
2078 * stripped entries from normal ones */
2079 if (qinfo->mask_bits & QETH_QARP_STRIP_ENTRIES)
2080 qdata->reply_bits |= QETH_QARP_STRIP_ENTRIES;
2081 memcpy(qinfo->udata + QETH_QARP_MASK_OFFSET, &qdata->reply_bits, 2);
2082 QETH_CARD_TEXT_(card, 4, "rc%i", 0);
2086 memcpy(qinfo->udata, &i, 4);
2090 static int qeth_l3_send_ipa_arp_cmd(struct qeth_card *card,
2091 struct qeth_cmd_buffer *iob, int len,
2092 int (*reply_cb)(struct qeth_card *, struct qeth_reply *,
2096 QETH_CARD_TEXT(card, 4, "sendarp");
2098 memcpy(iob->data, IPA_PDU_HEADER, IPA_PDU_HEADER_SIZE);
2099 memcpy(QETH_IPA_CMD_DEST_ADDR(iob->data),
2100 &card->token.ulp_connection_r, QETH_MPC_TOKEN_LENGTH);
2101 return qeth_send_control_data(card, IPA_PDU_HEADER_SIZE + len, iob,
2102 reply_cb, reply_param);
2105 static int qeth_l3_query_arp_cache_info(struct qeth_card *card,
2106 enum qeth_prot_versions prot,
2107 struct qeth_arp_query_info *qinfo)
2109 struct qeth_cmd_buffer *iob;
2110 struct qeth_ipa_cmd *cmd;
2114 QETH_CARD_TEXT_(card, 3, "qarpipv%i", prot);
2116 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
2117 IPA_CMD_ASS_ARP_QUERY_INFO,
2118 sizeof(struct qeth_arp_query_data)
2123 cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE);
2124 cmd->data.setassparms.data.query_arp.request_bits = 0x000F;
2125 cmd->data.setassparms.data.query_arp.reply_bits = 0;
2126 cmd->data.setassparms.data.query_arp.no_entries = 0;
2127 rc = qeth_l3_send_ipa_arp_cmd(card, iob,
2128 QETH_SETASS_BASE_LEN+QETH_ARP_CMD_LEN,
2129 qeth_l3_arp_query_cb, (void *)qinfo);
2133 "Error while querying ARP cache on %s: %s "
2134 "(0x%x/%d)\n", QETH_CARD_IFNAME(card),
2135 qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
2141 static int qeth_l3_arp_query(struct qeth_card *card, char __user *udata)
2143 struct qeth_arp_query_info qinfo = {0, };
2146 QETH_CARD_TEXT(card, 3, "arpquery");
2148 if (!qeth_is_supported(card,/*IPA_QUERY_ARP_ADDR_INFO*/
2149 IPA_ARP_PROCESSING)) {
2150 QETH_CARD_TEXT(card, 3, "arpqnsup");
2154 /* get size of userspace buffer and mask_bits -> 6 bytes */
2155 if (copy_from_user(&qinfo, udata, 6)) {
2159 qinfo.udata = kzalloc(qinfo.udata_len, GFP_KERNEL);
2164 qinfo.udata_offset = QETH_QARP_ENTRIES_OFFSET;
2165 rc = qeth_l3_query_arp_cache_info(card, QETH_PROT_IPV4, &qinfo);
2167 if (copy_to_user(udata, qinfo.udata, 4))
2171 if (qinfo.mask_bits & QETH_QARP_WITH_IPV6) {
2172 /* fails in case of GuestLAN QDIO mode */
2173 qeth_l3_query_arp_cache_info(card, QETH_PROT_IPV6, &qinfo);
2175 if (copy_to_user(udata, qinfo.udata, qinfo.udata_len)) {
2176 QETH_CARD_TEXT(card, 4, "qactf");
2180 QETH_CARD_TEXT(card, 4, "qacts");
2188 static int qeth_l3_arp_add_entry(struct qeth_card *card,
2189 struct qeth_arp_cache_entry *entry)
2191 struct qeth_cmd_buffer *iob;
2196 QETH_CARD_TEXT(card, 3, "arpadent");
2199 * currently GuestLAN only supports the ARP assist function
2200 * IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_ADD_ENTRY;
2201 * thus we say EOPNOTSUPP for this ARP function
2203 if (card->info.guestlan)
2205 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
2209 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
2210 IPA_CMD_ASS_ARP_ADD_ENTRY,
2211 sizeof(struct qeth_arp_cache_entry),
2215 rc = qeth_send_setassparms(card, iob,
2216 sizeof(struct qeth_arp_cache_entry),
2217 (unsigned long) entry,
2218 qeth_setassparms_cb, NULL);
2221 qeth_l3_ipaddr4_to_string((u8 *)entry->ipaddr, buf);
2222 QETH_DBF_MESSAGE(2, "Could not add ARP entry for address %s "
2223 "on %s: %s (0x%x/%d)\n", buf, QETH_CARD_IFNAME(card),
2224 qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
2229 static int qeth_l3_arp_remove_entry(struct qeth_card *card,
2230 struct qeth_arp_cache_entry *entry)
2232 struct qeth_cmd_buffer *iob;
2233 char buf[16] = {0, };
2237 QETH_CARD_TEXT(card, 3, "arprment");
2240 * currently GuestLAN only supports the ARP assist function
2241 * IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_REMOVE_ENTRY;
2242 * thus we say EOPNOTSUPP for this ARP function
2244 if (card->info.guestlan)
2246 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
2249 memcpy(buf, entry, 12);
2250 iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
2251 IPA_CMD_ASS_ARP_REMOVE_ENTRY,
2256 rc = qeth_send_setassparms(card, iob,
2257 12, (unsigned long)buf,
2258 qeth_setassparms_cb, NULL);
2262 qeth_l3_ipaddr4_to_string((u8 *)entry->ipaddr, buf);
2263 QETH_DBF_MESSAGE(2, "Could not delete ARP entry for address %s"
2264 " on %s: %s (0x%x/%d)\n", buf, QETH_CARD_IFNAME(card),
2265 qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
2270 static int qeth_l3_arp_flush_cache(struct qeth_card *card)
2275 QETH_CARD_TEXT(card, 3, "arpflush");
2278 * currently GuestLAN only supports the ARP assist function
2279 * IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_FLUSH_CACHE;
2280 * thus we say EOPNOTSUPP for this ARP function
2282 if (card->info.guestlan || (card->info.type == QETH_CARD_TYPE_IQD))
2284 if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
2287 rc = qeth_send_simple_setassparms(card, IPA_ARP_PROCESSING,
2288 IPA_CMD_ASS_ARP_FLUSH_CACHE, 0);
2291 QETH_DBF_MESSAGE(2, "Could not flush ARP cache on %s: %s "
2292 "(0x%x/%d)\n", QETH_CARD_IFNAME(card),
2293 qeth_l3_arp_get_error_cause(&rc), tmp, tmp);
2298 static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
2300 struct qeth_card *card = dev->ml_priv;
2301 struct qeth_arp_cache_entry arp_entry;
2305 case SIOC_QETH_ARP_SET_NO_ENTRIES:
2306 if (!capable(CAP_NET_ADMIN)) {
2310 rc = qeth_l3_arp_set_no_entries(card, rq->ifr_ifru.ifru_ivalue);
2312 case SIOC_QETH_ARP_QUERY_INFO:
2313 if (!capable(CAP_NET_ADMIN)) {
2317 rc = qeth_l3_arp_query(card, rq->ifr_ifru.ifru_data);
2319 case SIOC_QETH_ARP_ADD_ENTRY:
2320 if (!capable(CAP_NET_ADMIN)) {
2324 if (copy_from_user(&arp_entry, rq->ifr_ifru.ifru_data,
2325 sizeof(struct qeth_arp_cache_entry)))
2328 rc = qeth_l3_arp_add_entry(card, &arp_entry);
2330 case SIOC_QETH_ARP_REMOVE_ENTRY:
2331 if (!capable(CAP_NET_ADMIN)) {
2335 if (copy_from_user(&arp_entry, rq->ifr_ifru.ifru_data,
2336 sizeof(struct qeth_arp_cache_entry)))
2339 rc = qeth_l3_arp_remove_entry(card, &arp_entry);
2341 case SIOC_QETH_ARP_FLUSH_CACHE:
2342 if (!capable(CAP_NET_ADMIN)) {
2346 rc = qeth_l3_arp_flush_cache(card);
2354 static int qeth_l3_get_cast_type(struct sk_buff *skb)
2356 u16 hdr_mac = *((u16 *)skb->data);
2357 struct neighbour *n = NULL;
2358 struct dst_entry *dst;
2363 n = dst_neigh_lookup_skb(dst, skb);
2365 int cast_type = n->type;
2369 if ((cast_type == RTN_BROADCAST) ||
2370 (cast_type == RTN_MULTICAST) ||
2371 (cast_type == RTN_ANYCAST))
2377 /* no neighbour (eg AF_PACKET), fall back to target's IP address ... */
2378 if (be16_to_cpu(skb->protocol) == ETH_P_IPV6)
2379 return ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr) ?
2380 RTN_MULTICAST : RTN_UNSPEC;
2381 else if (be16_to_cpu(skb->protocol) == ETH_P_IP)
2382 return ipv4_is_multicast(ip_hdr(skb)->daddr) ?
2383 RTN_MULTICAST : RTN_UNSPEC;
2385 /* ... and MAC address */
2386 if (ether_addr_equal_64bits(eth_hdr(skb)->h_dest, skb->dev->broadcast))
2387 return RTN_BROADCAST;
2388 if (hdr_mac == QETH_ETH_MAC_V4 || hdr_mac == QETH_ETH_MAC_V6)
2389 return RTN_MULTICAST;
2391 /* default to unicast */
2395 static void qeth_l3_fill_af_iucv_hdr(struct qeth_card *card,
2396 struct qeth_hdr *hdr, struct sk_buff *skb)
2399 struct af_iucv_trans_hdr *iucv_hdr;
2401 memset(hdr, 0, sizeof(struct qeth_hdr));
2402 hdr->hdr.l3.id = QETH_HEADER_TYPE_LAYER3;
2403 hdr->hdr.l3.ext_flags = 0;
2404 hdr->hdr.l3.length = skb->len - ETH_HLEN;
2405 hdr->hdr.l3.flags = QETH_HDR_IPV6 | QETH_CAST_UNICAST;
2407 iucv_hdr = (struct af_iucv_trans_hdr *) (skb->data + ETH_HLEN);
2408 memset(daddr, 0, sizeof(daddr));
2411 memcpy(&daddr[8], iucv_hdr->destUserID, 8);
2412 memcpy(hdr->hdr.l3.dest_addr, daddr, 16);
2415 static void qeth_l3_fill_header(struct qeth_card *card, struct qeth_hdr *hdr,
2416 struct sk_buff *skb, int ipv, int cast_type)
2418 struct dst_entry *dst;
2420 memset(hdr, 0, sizeof(struct qeth_hdr));
2421 hdr->hdr.l3.id = QETH_HEADER_TYPE_LAYER3;
2422 hdr->hdr.l3.ext_flags = 0;
2425 * before we're going to overwrite this location with next hop ip.
2426 * v6 uses passthrough, v4 sets the tag in the QDIO header.
2428 if (skb_vlan_tag_present(skb)) {
2429 if ((ipv == 4) || (card->info.type == QETH_CARD_TYPE_IQD))
2430 hdr->hdr.l3.ext_flags = QETH_HDR_EXT_VLAN_FRAME;
2432 hdr->hdr.l3.ext_flags = QETH_HDR_EXT_INCLUDE_VLAN_TAG;
2433 hdr->hdr.l3.vlan_id = skb_vlan_tag_get(skb);
2436 hdr->hdr.l3.length = skb->len - sizeof(struct qeth_hdr);
2441 struct rtable *rt = (struct rtable *) dst;
2442 __be32 *pkey = &ip_hdr(skb)->daddr;
2444 if (rt && rt->rt_gateway)
2445 pkey = &rt->rt_gateway;
2448 hdr->hdr.l3.flags = qeth_l3_get_qeth_hdr_flags4(cast_type);
2449 memset(hdr->hdr.l3.dest_addr, 0, 12);
2450 *((__be32 *) (&hdr->hdr.l3.dest_addr[12])) = *pkey;
2451 } else if (ipv == 6) {
2452 struct rt6_info *rt = (struct rt6_info *) dst;
2453 struct in6_addr *pkey = &ipv6_hdr(skb)->daddr;
2455 if (rt && !ipv6_addr_any(&rt->rt6i_gateway))
2456 pkey = &rt->rt6i_gateway;
2459 hdr->hdr.l3.flags = qeth_l3_get_qeth_hdr_flags6(cast_type);
2460 if (card->info.type == QETH_CARD_TYPE_IQD)
2461 hdr->hdr.l3.flags &= ~QETH_HDR_PASSTHRU;
2462 memcpy(hdr->hdr.l3.dest_addr, pkey, 16);
2464 if (ether_addr_equal_64bits(eth_hdr(skb)->h_dest,
2465 skb->dev->broadcast)) {
2467 hdr->hdr.l3.flags = QETH_CAST_BROADCAST |
2470 hdr->hdr.l3.flags = (cast_type == RTN_MULTICAST) ?
2471 QETH_CAST_MULTICAST | QETH_HDR_PASSTHRU :
2472 QETH_CAST_UNICAST | QETH_HDR_PASSTHRU;
2478 static void qeth_l3_hdr_csum(struct qeth_card *card, struct qeth_hdr *hdr,
2479 struct sk_buff *skb)
2481 struct iphdr *iph = ip_hdr(skb);
2483 /* tcph->check contains already the pseudo hdr checksum
2484 * so just set the header flags
2486 if (iph->protocol == IPPROTO_UDP)
2487 hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_UDP;
2488 hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_CSUM_TRANSP_REQ |
2489 QETH_HDR_EXT_CSUM_HDR_REQ;
2491 if (card->options.performance_stats)
2492 card->perf_stats.tx_csum++;
2495 static void qeth_tso_fill_header(struct qeth_card *card,
2496 struct qeth_hdr *qhdr, struct sk_buff *skb)
2498 struct qeth_hdr_tso *hdr = (struct qeth_hdr_tso *)qhdr;
2499 struct tcphdr *tcph = tcp_hdr(skb);
2500 struct iphdr *iph = ip_hdr(skb);
2501 struct ipv6hdr *ip6h = ipv6_hdr(skb);
2503 /*fix header to TSO values ...*/
2504 hdr->hdr.hdr.l3.id = QETH_HEADER_TYPE_TSO;
2505 hdr->hdr.hdr.l3.length = skb->len - sizeof(struct qeth_hdr_tso);
2506 /*set values which are fix for the first approach ...*/
2507 hdr->ext.hdr_tot_len = (__u16) sizeof(struct qeth_hdr_ext_tso);
2508 hdr->ext.imb_hdr_no = 1;
2509 hdr->ext.hdr_type = 1;
2510 hdr->ext.hdr_version = 1;
2511 hdr->ext.hdr_len = 28;
2512 /*insert non-fix values */
2513 hdr->ext.mss = skb_shinfo(skb)->gso_size;
2514 hdr->ext.dg_hdr_len = (__u16)(ip_hdrlen(skb) + tcp_hdrlen(skb));
2515 hdr->ext.payload_len = (__u16)(skb->len - hdr->ext.dg_hdr_len -
2516 sizeof(struct qeth_hdr_tso));
2518 if (be16_to_cpu(skb->protocol) == ETH_P_IPV6) {
2519 ip6h->payload_len = 0;
2520 tcph->check = ~csum_ipv6_magic(&ip6h->saddr, &ip6h->daddr,
2523 /*OSA want us to set these values ...*/
2524 tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr,
2532 * qeth_l3_get_elements_no_tso() - find number of SBALEs for skb data for tso
2533 * @card: qeth card structure, to check max. elems.
2535 * @extra_elems: extra elems needed, to check against max.
2537 * Returns the number of pages, and thus QDIO buffer elements, needed to cover
2538 * skb data, including linear part and fragments, but excluding TCP header.
2539 * (Exclusion of TCP header distinguishes it from qeth_get_elements_no().)
2540 * Checks if the result plus extra_elems fits under the limit for the card.
2541 * Returns 0 if it does not.
2542 * Note: extra_elems is not included in the returned result.
2544 static int qeth_l3_get_elements_no_tso(struct qeth_card *card,
2545 struct sk_buff *skb, int extra_elems)
2547 addr_t tcpdptr = (addr_t)tcp_hdr(skb) + tcp_hdrlen(skb);
2548 int elements = qeth_get_elements_for_range(
2550 (addr_t)skb->data + skb_headlen(skb)) +
2551 qeth_get_elements_for_frags(skb);
2553 if ((elements + extra_elems) > QETH_MAX_BUFFER_ELEMENTS(card)) {
2555 "Invalid size of TSO IP packet (Number=%d / Length=%d). Discarded.\n",
2556 elements + extra_elems, skb->len);
2562 static netdev_tx_t qeth_l3_hard_start_xmit(struct sk_buff *skb,
2563 struct net_device *dev)
2567 struct qeth_hdr *hdr = NULL;
2568 int hdr_elements = 0;
2570 struct qeth_card *card = dev->ml_priv;
2571 struct sk_buff *new_skb = NULL;
2572 int ipv = qeth_get_ip_version(skb);
2573 int cast_type = qeth_l3_get_cast_type(skb);
2574 struct qeth_qdio_out_q *queue =
2575 card->qdio.out_qs[card->qdio.do_prio_queueing
2576 || (cast_type && card->info.is_multicast_different) ?
2577 qeth_get_priority_queue(card, skb, ipv, cast_type) :
2578 card->qdio.default_out_queue];
2579 int tx_bytes = skb->len;
2580 unsigned int hd_len = 0;
2582 int data_offset = -1;
2583 unsigned int nr_frags;
2585 if (((card->info.type == QETH_CARD_TYPE_IQD) &&
2586 (((card->options.cq != QETH_CQ_ENABLED) && !ipv) ||
2587 ((card->options.cq == QETH_CQ_ENABLED) &&
2588 (be16_to_cpu(skb->protocol) != ETH_P_AF_IUCV)))) ||
2589 card->options.sniffer)
2592 if ((card->state != CARD_STATE_UP) || !card->lan_online) {
2593 card->stats.tx_carrier_errors++;
2597 if ((cast_type == RTN_BROADCAST) &&
2598 (card->info.broadcast_capable == 0))
2601 if (card->options.performance_stats) {
2602 card->perf_stats.outbound_cnt++;
2603 card->perf_stats.outbound_start_time = qeth_get_micros();
2606 /* Ignore segment size from skb_is_gso(), 1 page is always used. */
2607 use_tso = skb_is_gso(skb) &&
2608 (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4);
2610 if (card->info.type == QETH_CARD_TYPE_IQD) {
2612 data_offset = ETH_HLEN;
2613 hd_len = sizeof(*hdr);
2614 hdr = kmem_cache_alloc(qeth_core_header_cache, GFP_ATOMIC);
2619 /* create a clone with writeable headroom */
2620 new_skb = skb_realloc_headroom(skb, sizeof(struct qeth_hdr_tso)
2626 skb_pull(new_skb, ETH_HLEN);
2629 if (ipv != 4 && skb_vlan_tag_present(new_skb)) {
2630 skb_push(new_skb, VLAN_HLEN);
2631 skb_copy_to_linear_data(new_skb, new_skb->data + 4, 4);
2632 skb_copy_to_linear_data_offset(new_skb, 4,
2633 new_skb->data + 8, 4);
2634 skb_copy_to_linear_data_offset(new_skb, 8,
2635 new_skb->data + 12, 4);
2636 tag = (__be16 *)(new_skb->data + 12);
2637 *tag = cpu_to_be16(ETH_P_8021Q);
2638 *(tag + 1) = cpu_to_be16(skb_vlan_tag_get(new_skb));
2642 netif_stop_queue(dev);
2644 /* fix hardware limitation: as long as we do not have sbal
2645 * chaining we can not send long frag lists
2647 if ((card->info.type != QETH_CARD_TYPE_IQD) &&
2648 ((use_tso && !qeth_l3_get_elements_no_tso(card, new_skb, 1)) ||
2649 (!use_tso && !qeth_get_elements_no(card, new_skb, 0, 0)))) {
2650 int lin_rc = skb_linearize(new_skb);
2652 if (card->options.performance_stats) {
2654 card->perf_stats.tx_linfail++;
2656 card->perf_stats.tx_lin++;
2661 nr_frags = skb_shinfo(new_skb)->nr_frags;
2664 hdr = skb_push(new_skb, sizeof(struct qeth_hdr_tso));
2665 memset(hdr, 0, sizeof(struct qeth_hdr_tso));
2666 qeth_l3_fill_header(card, hdr, new_skb, ipv, cast_type);
2667 qeth_tso_fill_header(card, hdr, new_skb);
2670 if (data_offset < 0) {
2671 hdr = skb_push(new_skb, sizeof(struct qeth_hdr));
2672 qeth_l3_fill_header(card, hdr, new_skb, ipv,
2675 if (be16_to_cpu(new_skb->protocol) == ETH_P_AF_IUCV)
2676 qeth_l3_fill_af_iucv_hdr(card, hdr, new_skb);
2678 qeth_l3_fill_header(card, hdr, new_skb, ipv,
2680 hdr->hdr.l3.length = new_skb->len - data_offset;
2684 if (skb->ip_summed == CHECKSUM_PARTIAL)
2685 qeth_l3_hdr_csum(card, hdr, new_skb);
2688 elements = use_tso ?
2689 qeth_l3_get_elements_no_tso(card, new_skb, hdr_elements) :
2690 qeth_get_elements_no(card, new_skb, hdr_elements,
2691 (data_offset > 0) ? data_offset : 0);
2693 if (data_offset >= 0)
2694 kmem_cache_free(qeth_core_header_cache, hdr);
2697 elements += hdr_elements;
2699 if (card->info.type != QETH_CARD_TYPE_IQD) {
2702 hd_len = sizeof(struct qeth_hdr_tso) +
2703 ip_hdrlen(new_skb) + tcp_hdrlen(new_skb);
2706 len = sizeof(struct qeth_hdr_layer3);
2709 if (qeth_hdr_chk_and_bounce(new_skb, &hdr, len))
2711 rc = qeth_do_send_packet(card, queue, new_skb, hdr, hd_len,
2714 rc = qeth_do_send_packet_fast(queue, new_skb, hdr, data_offset,
2718 card->stats.tx_packets++;
2719 card->stats.tx_bytes += tx_bytes;
2721 dev_kfree_skb_any(skb);
2722 if (card->options.performance_stats) {
2724 card->perf_stats.large_send_bytes += tx_bytes;
2725 card->perf_stats.large_send_cnt++;
2728 card->perf_stats.sg_skbs_sent++;
2729 /* nr_frags + skb->data */
2730 card->perf_stats.sg_frags_sent += nr_frags + 1;
2735 if (data_offset >= 0)
2736 kmem_cache_free(qeth_core_header_cache, hdr);
2740 dev_kfree_skb_any(new_skb);
2741 return NETDEV_TX_BUSY;
2746 netif_wake_queue(dev);
2747 if (card->options.performance_stats)
2748 card->perf_stats.outbound_time += qeth_get_micros() -
2749 card->perf_stats.outbound_start_time;
2753 card->stats.tx_dropped++;
2754 card->stats.tx_errors++;
2755 if ((new_skb != skb) && new_skb)
2756 dev_kfree_skb_any(new_skb);
2757 dev_kfree_skb_any(skb);
2758 netif_wake_queue(dev);
2759 return NETDEV_TX_OK;
2762 static int __qeth_l3_open(struct net_device *dev)
2764 struct qeth_card *card = dev->ml_priv;
2767 QETH_CARD_TEXT(card, 4, "qethopen");
2768 if (card->state == CARD_STATE_UP)
2770 if (card->state != CARD_STATE_SOFTSETUP)
2772 card->data.state = CH_STATE_UP;
2773 card->state = CARD_STATE_UP;
2774 netif_start_queue(dev);
2776 if (qdio_stop_irq(card->data.ccwdev, 0) >= 0) {
2777 napi_enable(&card->napi);
2778 napi_schedule(&card->napi);
2784 static int qeth_l3_open(struct net_device *dev)
2786 struct qeth_card *card = dev->ml_priv;
2788 QETH_CARD_TEXT(card, 5, "qethope_");
2789 if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) {
2790 QETH_CARD_TEXT(card, 3, "openREC");
2791 return -ERESTARTSYS;
2793 return __qeth_l3_open(dev);
2796 static int qeth_l3_stop(struct net_device *dev)
2798 struct qeth_card *card = dev->ml_priv;
2800 QETH_CARD_TEXT(card, 4, "qethstop");
2801 netif_tx_disable(dev);
2802 if (card->state == CARD_STATE_UP) {
2803 card->state = CARD_STATE_SOFTSETUP;
2804 napi_disable(&card->napi);
2809 static const struct ethtool_ops qeth_l3_ethtool_ops = {
2810 .get_link = ethtool_op_get_link,
2811 .get_strings = qeth_core_get_strings,
2812 .get_ethtool_stats = qeth_core_get_ethtool_stats,
2813 .get_sset_count = qeth_core_get_sset_count,
2814 .get_drvinfo = qeth_core_get_drvinfo,
2815 .get_link_ksettings = qeth_core_ethtool_get_link_ksettings,
2819 * we need NOARP for IPv4 but we want neighbor solicitation for IPv6. Setting
2820 * NOARP on the netdevice is no option because it also turns off neighbor
2821 * solicitation. For IPv4 we install a neighbor_setup function. We don't want
2822 * arp resolution but we want the hard header (packet socket will work
2825 static int qeth_l3_neigh_setup_noarp(struct neighbour *n)
2827 n->nud_state = NUD_NOARP;
2828 memcpy(n->ha, "FAKELL", 6);
2829 n->output = n->ops->connected_output;
2834 qeth_l3_neigh_setup(struct net_device *dev, struct neigh_parms *np)
2836 if (np->tbl->family == AF_INET)
2837 np->neigh_setup = qeth_l3_neigh_setup_noarp;
2842 static const struct net_device_ops qeth_l3_netdev_ops = {
2843 .ndo_open = qeth_l3_open,
2844 .ndo_stop = qeth_l3_stop,
2845 .ndo_get_stats = qeth_get_stats,
2846 .ndo_start_xmit = qeth_l3_hard_start_xmit,
2847 .ndo_validate_addr = eth_validate_addr,
2848 .ndo_set_rx_mode = qeth_l3_set_rx_mode,
2849 .ndo_do_ioctl = qeth_do_ioctl,
2850 .ndo_change_mtu = qeth_change_mtu,
2851 .ndo_fix_features = qeth_fix_features,
2852 .ndo_set_features = qeth_set_features,
2853 .ndo_vlan_rx_add_vid = qeth_l3_vlan_rx_add_vid,
2854 .ndo_vlan_rx_kill_vid = qeth_l3_vlan_rx_kill_vid,
2855 .ndo_tx_timeout = qeth_tx_timeout,
2858 static const struct net_device_ops qeth_l3_osa_netdev_ops = {
2859 .ndo_open = qeth_l3_open,
2860 .ndo_stop = qeth_l3_stop,
2861 .ndo_get_stats = qeth_get_stats,
2862 .ndo_start_xmit = qeth_l3_hard_start_xmit,
2863 .ndo_features_check = qeth_features_check,
2864 .ndo_validate_addr = eth_validate_addr,
2865 .ndo_set_rx_mode = qeth_l3_set_rx_mode,
2866 .ndo_do_ioctl = qeth_do_ioctl,
2867 .ndo_change_mtu = qeth_change_mtu,
2868 .ndo_fix_features = qeth_fix_features,
2869 .ndo_set_features = qeth_set_features,
2870 .ndo_vlan_rx_add_vid = qeth_l3_vlan_rx_add_vid,
2871 .ndo_vlan_rx_kill_vid = qeth_l3_vlan_rx_kill_vid,
2872 .ndo_tx_timeout = qeth_tx_timeout,
2873 .ndo_neigh_setup = qeth_l3_neigh_setup,
2876 static int qeth_l3_setup_netdev(struct qeth_card *card)
2880 if (card->info.type == QETH_CARD_TYPE_OSD ||
2881 card->info.type == QETH_CARD_TYPE_OSX) {
2882 if ((card->info.link_type == QETH_LINK_TYPE_LANE_TR) ||
2883 (card->info.link_type == QETH_LINK_TYPE_HSTR)) {
2884 pr_info("qeth_l3: ignoring TR device\n");
2887 card->dev = alloc_etherdev(0);
2890 card->dev->netdev_ops = &qeth_l3_osa_netdev_ops;
2892 /*IPv6 address autoconfiguration stuff*/
2893 qeth_l3_get_unique_id(card);
2894 if (!(card->info.unique_id & UNIQUE_ID_NOT_BY_CARD))
2895 card->dev->dev_id = card->info.unique_id &
2897 if (!card->info.guestlan) {
2898 card->dev->hw_features = NETIF_F_SG |
2899 NETIF_F_RXCSUM | NETIF_F_IP_CSUM |
2901 card->dev->vlan_features = NETIF_F_SG |
2902 NETIF_F_RXCSUM | NETIF_F_IP_CSUM |
2904 card->dev->features |= NETIF_F_SG;
2907 } else if (card->info.type == QETH_CARD_TYPE_IQD) {
2908 card->dev = alloc_netdev(0, "hsi%d", NET_NAME_UNKNOWN,
2912 card->dev->flags |= IFF_NOARP;
2913 card->dev->netdev_ops = &qeth_l3_netdev_ops;
2914 rc = qeth_l3_iqd_read_initial_mac(card);
2917 if (card->options.hsuid[0])
2918 memcpy(card->dev->perm_addr, card->options.hsuid, 9);
2922 card->dev->ml_priv = card;
2923 card->dev->watchdog_timeo = QETH_TX_TIMEOUT;
2924 card->dev->mtu = card->info.initial_mtu;
2925 card->dev->min_mtu = 64;
2926 card->dev->max_mtu = ETH_MAX_MTU;
2927 card->dev->ethtool_ops = &qeth_l3_ethtool_ops;
2928 card->dev->features |= NETIF_F_HW_VLAN_CTAG_TX |
2929 NETIF_F_HW_VLAN_CTAG_RX |
2930 NETIF_F_HW_VLAN_CTAG_FILTER;
2931 netif_keep_dst(card->dev);
2932 netif_set_gso_max_size(card->dev, (QETH_MAX_BUFFER_ELEMENTS(card) - 1) *
2935 SET_NETDEV_DEV(card->dev, &card->gdev->dev);
2936 netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT);
2937 netif_carrier_off(card->dev);
2938 return register_netdev(card->dev);
2941 static const struct device_type qeth_l3_devtype = {
2942 .name = "qeth_layer3",
2943 .groups = qeth_l3_attr_groups,
2946 static int qeth_l3_probe_device(struct ccwgroup_device *gdev)
2948 struct qeth_card *card = dev_get_drvdata(&gdev->dev);
2951 if (gdev->dev.type == &qeth_generic_devtype) {
2952 rc = qeth_l3_create_device_attributes(&gdev->dev);
2956 hash_init(card->ip_htable);
2957 hash_init(card->ip_mc_htable);
2958 card->options.layer2 = 0;
2959 card->info.hwtrap = 0;
2963 static void qeth_l3_remove_device(struct ccwgroup_device *cgdev)
2965 struct qeth_card *card = dev_get_drvdata(&cgdev->dev);
2967 if (cgdev->dev.type == &qeth_generic_devtype)
2968 qeth_l3_remove_device_attributes(&cgdev->dev);
2970 qeth_set_allowed_threads(card, 0, 1);
2971 wait_event(card->wait_q, qeth_threads_running(card, 0xffffffff) == 0);
2973 if (cgdev->state == CCWGROUP_ONLINE)
2974 qeth_l3_set_offline(cgdev);
2977 netif_napi_del(&card->napi);
2978 unregister_netdev(card->dev);
2982 qeth_l3_clear_ip_htable(card, 0);
2983 qeth_l3_clear_ipato_list(card);
2987 static int __qeth_l3_set_online(struct ccwgroup_device *gdev, int recovery_mode)
2989 struct qeth_card *card = dev_get_drvdata(&gdev->dev);
2991 enum qeth_card_states recover_flag;
2993 mutex_lock(&card->discipline_mutex);
2994 mutex_lock(&card->conf_mutex);
2995 QETH_DBF_TEXT(SETUP, 2, "setonlin");
2996 QETH_DBF_HEX(SETUP, 2, &card, sizeof(void *));
2998 recover_flag = card->state;
2999 rc = qeth_core_hardsetup_card(card);
3001 QETH_DBF_TEXT_(SETUP, 2, "2err%04x", rc);
3006 if (!card->dev && qeth_l3_setup_netdev(card)) {
3011 if (qeth_is_diagass_supported(card, QETH_DIAGS_CMD_TRAP)) {
3012 if (card->info.hwtrap &&
3013 qeth_hw_trap(card, QETH_DIAGS_TRAP_ARM))
3014 card->info.hwtrap = 0;
3016 card->info.hwtrap = 0;
3018 card->state = CARD_STATE_HARDSETUP;
3019 memset(&card->rx, 0, sizeof(struct qeth_rx));
3020 qeth_print_status_message(card);
3023 QETH_DBF_TEXT(SETUP, 2, "softsetp");
3025 rc = qeth_l3_setadapter_parms(card);
3027 QETH_DBF_TEXT_(SETUP, 2, "2err%04x", rc);
3028 if (!card->options.sniffer) {
3029 rc = qeth_l3_start_ipassists(card);
3031 QETH_DBF_TEXT_(SETUP, 2, "3err%d", rc);
3034 rc = qeth_l3_setrouting_v4(card);
3036 QETH_DBF_TEXT_(SETUP, 2, "4err%04x", rc);
3037 rc = qeth_l3_setrouting_v6(card);
3039 QETH_DBF_TEXT_(SETUP, 2, "5err%04x", rc);
3041 netif_tx_disable(card->dev);
3043 rc = qeth_init_qdio_queues(card);
3045 QETH_DBF_TEXT_(SETUP, 2, "6err%d", rc);
3049 card->state = CARD_STATE_SOFTSETUP;
3051 qeth_set_allowed_threads(card, 0xffffffff, 0);
3052 qeth_l3_recover_ip(card);
3053 if (card->lan_online)
3054 netif_carrier_on(card->dev);
3056 netif_carrier_off(card->dev);
3057 if (recover_flag == CARD_STATE_RECOVER) {
3060 __qeth_l3_open(card->dev);
3062 dev_open(card->dev);
3063 qeth_l3_set_rx_mode(card->dev);
3064 qeth_recover_features(card->dev);
3067 qeth_trace_features(card);
3068 /* let user_space know that device is online */
3069 kobject_uevent(&gdev->dev.kobj, KOBJ_CHANGE);
3070 mutex_unlock(&card->conf_mutex);
3071 mutex_unlock(&card->discipline_mutex);
3074 qeth_l3_stop_card(card, 0);
3075 ccw_device_set_offline(CARD_DDEV(card));
3076 ccw_device_set_offline(CARD_WDEV(card));
3077 ccw_device_set_offline(CARD_RDEV(card));
3078 qdio_free(CARD_DDEV(card));
3079 if (recover_flag == CARD_STATE_RECOVER)
3080 card->state = CARD_STATE_RECOVER;
3082 card->state = CARD_STATE_DOWN;
3083 mutex_unlock(&card->conf_mutex);
3084 mutex_unlock(&card->discipline_mutex);
3088 static int qeth_l3_set_online(struct ccwgroup_device *gdev)
3090 return __qeth_l3_set_online(gdev, 0);
3093 static int __qeth_l3_set_offline(struct ccwgroup_device *cgdev,
3096 struct qeth_card *card = dev_get_drvdata(&cgdev->dev);
3097 int rc = 0, rc2 = 0, rc3 = 0;
3098 enum qeth_card_states recover_flag;
3100 mutex_lock(&card->discipline_mutex);
3101 mutex_lock(&card->conf_mutex);
3102 QETH_DBF_TEXT(SETUP, 3, "setoffl");
3103 QETH_DBF_HEX(SETUP, 3, &card, sizeof(void *));
3105 if (card->dev && netif_carrier_ok(card->dev))
3106 netif_carrier_off(card->dev);
3107 recover_flag = card->state;
3108 if ((!recovery_mode && card->info.hwtrap) || card->info.hwtrap == 2) {
3109 qeth_hw_trap(card, QETH_DIAGS_TRAP_DISARM);
3110 card->info.hwtrap = 1;
3112 qeth_l3_stop_card(card, recovery_mode);
3113 if ((card->options.cq == QETH_CQ_ENABLED) && card->dev) {
3115 call_netdevice_notifiers(NETDEV_REBOOT, card->dev);
3118 rc = ccw_device_set_offline(CARD_DDEV(card));
3119 rc2 = ccw_device_set_offline(CARD_WDEV(card));
3120 rc3 = ccw_device_set_offline(CARD_RDEV(card));
3122 rc = (rc2) ? rc2 : rc3;
3124 QETH_DBF_TEXT_(SETUP, 2, "1err%d", rc);
3125 qdio_free(CARD_DDEV(card));
3126 if (recover_flag == CARD_STATE_UP)
3127 card->state = CARD_STATE_RECOVER;
3128 /* let user_space know that device is offline */
3129 kobject_uevent(&cgdev->dev.kobj, KOBJ_CHANGE);
3130 mutex_unlock(&card->conf_mutex);
3131 mutex_unlock(&card->discipline_mutex);
3135 static int qeth_l3_set_offline(struct ccwgroup_device *cgdev)
3137 return __qeth_l3_set_offline(cgdev, 0);
3140 static int qeth_l3_recover(void *ptr)
3142 struct qeth_card *card;
3145 card = (struct qeth_card *) ptr;
3146 QETH_CARD_TEXT(card, 2, "recover1");
3147 QETH_CARD_HEX(card, 2, &card, sizeof(void *));
3148 if (!qeth_do_run_thread(card, QETH_RECOVER_THREAD))
3150 QETH_CARD_TEXT(card, 2, "recover2");
3151 dev_warn(&card->gdev->dev,
3152 "A recovery process has been started for the device\n");
3153 qeth_set_recovery_task(card);
3154 __qeth_l3_set_offline(card->gdev, 1);
3155 rc = __qeth_l3_set_online(card->gdev, 1);
3157 dev_info(&card->gdev->dev,
3158 "Device successfully recovered!\n");
3160 qeth_close_dev(card);
3161 dev_warn(&card->gdev->dev, "The qeth device driver "
3162 "failed to recover an error on the device\n");
3164 qeth_clear_recovery_task(card);
3165 qeth_clear_thread_start_bit(card, QETH_RECOVER_THREAD);
3166 qeth_clear_thread_running_bit(card, QETH_RECOVER_THREAD);
3170 static int qeth_l3_pm_suspend(struct ccwgroup_device *gdev)
3172 struct qeth_card *card = dev_get_drvdata(&gdev->dev);
3175 netif_device_detach(card->dev);
3176 qeth_set_allowed_threads(card, 0, 1);
3177 wait_event(card->wait_q, qeth_threads_running(card, 0xffffffff) == 0);
3178 if (gdev->state == CCWGROUP_OFFLINE)
3180 if (card->state == CARD_STATE_UP) {
3181 if (card->info.hwtrap)
3182 qeth_hw_trap(card, QETH_DIAGS_TRAP_DISARM);
3183 __qeth_l3_set_offline(card->gdev, 1);
3185 __qeth_l3_set_offline(card->gdev, 0);
3189 static int qeth_l3_pm_resume(struct ccwgroup_device *gdev)
3191 struct qeth_card *card = dev_get_drvdata(&gdev->dev);
3194 if (gdev->state == CCWGROUP_OFFLINE)
3197 if (card->state == CARD_STATE_RECOVER) {
3198 rc = __qeth_l3_set_online(card->gdev, 1);
3201 dev_close(card->dev);
3205 rc = __qeth_l3_set_online(card->gdev, 0);
3207 qeth_set_allowed_threads(card, 0xffffffff, 0);
3209 netif_device_attach(card->dev);
3211 dev_warn(&card->gdev->dev, "The qeth device driver "
3212 "failed to recover an error on the device\n");
3216 /* Returns zero if the command is successfully "consumed" */
3217 static int qeth_l3_control_event(struct qeth_card *card,
3218 struct qeth_ipa_cmd *cmd)
3223 struct qeth_discipline qeth_l3_discipline = {
3224 .devtype = &qeth_l3_devtype,
3225 .start_poll = qeth_qdio_start_poll,
3226 .input_handler = (qdio_handler_t *) qeth_qdio_input_handler,
3227 .output_handler = (qdio_handler_t *) qeth_qdio_output_handler,
3228 .process_rx_buffer = qeth_l3_process_inbound_buffer,
3229 .recover = qeth_l3_recover,
3230 .setup = qeth_l3_probe_device,
3231 .remove = qeth_l3_remove_device,
3232 .set_online = qeth_l3_set_online,
3233 .set_offline = qeth_l3_set_offline,
3234 .freeze = qeth_l3_pm_suspend,
3235 .thaw = qeth_l3_pm_resume,
3236 .restore = qeth_l3_pm_resume,
3237 .do_ioctl = qeth_l3_do_ioctl,
3238 .control_event_handler = qeth_l3_control_event,
3240 EXPORT_SYMBOL_GPL(qeth_l3_discipline);
3242 static int qeth_l3_ip_event(struct notifier_block *this,
3243 unsigned long event, void *ptr)
3246 struct in_ifaddr *ifa = (struct in_ifaddr *)ptr;
3247 struct net_device *dev = (struct net_device *)ifa->ifa_dev->dev;
3248 struct qeth_ipaddr *addr;
3249 struct qeth_card *card;
3251 if (dev_net(dev) != &init_net)
3254 card = qeth_l3_get_card_from_dev(dev);
3257 QETH_CARD_TEXT(card, 3, "ipevent");
3259 addr = qeth_l3_get_addr_buffer(QETH_PROT_IPV4);
3261 addr->u.a4.addr = be32_to_cpu(ifa->ifa_address);
3262 addr->u.a4.mask = be32_to_cpu(ifa->ifa_mask);
3263 addr->type = QETH_IP_TYPE_NORMAL;
3269 spin_lock_bh(&card->ip_lock);
3270 qeth_l3_add_ip(card, addr);
3271 spin_unlock_bh(&card->ip_lock);
3274 spin_lock_bh(&card->ip_lock);
3275 qeth_l3_delete_ip(card, addr);
3276 spin_unlock_bh(&card->ip_lock);
3284 static struct notifier_block qeth_l3_ip_notifier = {
3289 static int qeth_l3_ip6_event(struct notifier_block *this,
3290 unsigned long event, void *ptr)
3292 struct inet6_ifaddr *ifa = (struct inet6_ifaddr *)ptr;
3293 struct net_device *dev = (struct net_device *)ifa->idev->dev;
3294 struct qeth_ipaddr *addr;
3295 struct qeth_card *card;
3297 card = qeth_l3_get_card_from_dev(dev);
3300 QETH_CARD_TEXT(card, 3, "ip6event");
3301 if (!qeth_is_supported(card, IPA_IPV6))
3304 addr = qeth_l3_get_addr_buffer(QETH_PROT_IPV6);
3306 memcpy(&addr->u.a6.addr, &ifa->addr, sizeof(struct in6_addr));
3307 addr->u.a6.pfxlen = ifa->prefix_len;
3308 addr->type = QETH_IP_TYPE_NORMAL;
3314 spin_lock_bh(&card->ip_lock);
3315 qeth_l3_add_ip(card, addr);
3316 spin_unlock_bh(&card->ip_lock);
3319 spin_lock_bh(&card->ip_lock);
3320 qeth_l3_delete_ip(card, addr);
3321 spin_unlock_bh(&card->ip_lock);
3329 static struct notifier_block qeth_l3_ip6_notifier = {
3334 static int qeth_l3_register_notifiers(void)
3338 QETH_DBF_TEXT(SETUP, 5, "regnotif");
3339 rc = register_inetaddr_notifier(&qeth_l3_ip_notifier);
3342 rc = register_inet6addr_notifier(&qeth_l3_ip6_notifier);
3344 unregister_inetaddr_notifier(&qeth_l3_ip_notifier);
3350 static void qeth_l3_unregister_notifiers(void)
3352 QETH_DBF_TEXT(SETUP, 5, "unregnot");
3353 WARN_ON(unregister_inetaddr_notifier(&qeth_l3_ip_notifier));
3354 WARN_ON(unregister_inet6addr_notifier(&qeth_l3_ip6_notifier));
3357 static int __init qeth_l3_init(void)
3359 pr_info("register layer 3 discipline\n");
3360 return qeth_l3_register_notifiers();
3363 static void __exit qeth_l3_exit(void)
3365 qeth_l3_unregister_notifiers();
3366 pr_info("unregister layer 3 discipline\n");
3369 module_init(qeth_l3_init);
3370 module_exit(qeth_l3_exit);
3371 MODULE_AUTHOR("Frank Blaschka <frank.blaschka@de.ibm.com>");
3372 MODULE_DESCRIPTION("qeth layer 3 discipline");
3373 MODULE_LICENSE("GPL");