1// SPDX-License-Identifier: GPL-2.0
2/*
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>
8 */
9
10#define KMSG_COMPONENT "qeth"
11#define pr_fmt(fmt) KMSG_COMPONENT ": " fmt
12
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>
20#include <linux/ip.h>
21#include <linux/in.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_ether.h>
27#include <linux/if_vlan.h>
28#include <linux/skbuff.h>
29
30#include <net/ip.h>
31#include <net/arp.h>
32#include <net/route.h>
33#include <net/ipv6.h>
34#include <net/ip6_route.h>
35#include <net/iucv/af_iucv.h>
36#include <linux/hashtable.h>
37
38#include "qeth_l3.h"
39
40static int qeth_l3_register_addr_entry(struct qeth_card *,
41		struct qeth_ipaddr *);
42static int qeth_l3_deregister_addr_entry(struct qeth_card *,
43		struct qeth_ipaddr *);
44
45int qeth_l3_ipaddr_to_string(enum qeth_prot_versions proto, const u8 *addr,
46			     char *buf)
47{
48	if (proto == QETH_PROT_IPV4)
49		return sprintf(buf, "%pI4", addr);
50	else
51		return sprintf(buf, "%pI6", addr);
52}
53
54static struct qeth_ipaddr *qeth_l3_find_addr_by_ip(struct qeth_card *card,
55						   struct qeth_ipaddr *query)
56{
57	u32 key = qeth_l3_ipaddr_hash(query);
58	struct qeth_ipaddr *addr;
59
60	if (query->is_multicast) {
61		hash_for_each_possible(card->rx_mode_addrs, addr, hnode, key)
62			if (qeth_l3_addr_match_ip(addr, query))
63				return addr;
64	} else {
65		hash_for_each_possible(card->ip_htable,  addr, hnode, key)
66			if (qeth_l3_addr_match_ip(addr, query))
67				return addr;
68	}
69	return NULL;
70}
71
72static void qeth_l3_convert_addr_to_bits(u8 *addr, u8 *bits, int len)
73{
74	int i, j;
75	u8 octet;
76
77	for (i = 0; i < len; ++i) {
78		octet = addr[i];
79		for (j = 7; j >= 0; --j) {
80			bits[i*8 + j] = octet & 1;
81			octet >>= 1;
82		}
83	}
84}
85
86static bool qeth_l3_is_addr_covered_by_ipato(struct qeth_card *card,
87					     struct qeth_ipaddr *addr)
88{
89	struct qeth_ipato_entry *ipatoe;
90	u8 addr_bits[128] = {0, };
91	u8 ipatoe_bits[128] = {0, };
92	int rc = 0;
93
94	if (!card->ipato.enabled)
95		return false;
96	if (addr->type != QETH_IP_TYPE_NORMAL)
97		return false;
98
99	qeth_l3_convert_addr_to_bits((u8 *) &addr->u, addr_bits,
100				     (addr->proto == QETH_PROT_IPV4) ? 4 : 16);
101	list_for_each_entry(ipatoe, &card->ipato.entries, entry) {
102		if (addr->proto != ipatoe->proto)
103			continue;
104		qeth_l3_convert_addr_to_bits(ipatoe->addr, ipatoe_bits,
105					  (ipatoe->proto == QETH_PROT_IPV4) ?
106					  4 : 16);
107		if (addr->proto == QETH_PROT_IPV4)
108			rc = !memcmp(addr_bits, ipatoe_bits, ipatoe->mask_bits);
109		else
110			rc = !memcmp(addr_bits, ipatoe_bits, ipatoe->mask_bits);
111		if (rc)
112			break;
113	}
114	/* invert? */
115	if ((addr->proto == QETH_PROT_IPV4) && card->ipato.invert4)
116		rc = !rc;
117	else if ((addr->proto == QETH_PROT_IPV6) && card->ipato.invert6)
118		rc = !rc;
119
120	return rc;
121}
122
123static int qeth_l3_delete_ip(struct qeth_card *card,
124			     struct qeth_ipaddr *tmp_addr)
125{
126	int rc = 0;
127	struct qeth_ipaddr *addr;
128
129	if (tmp_addr->type == QETH_IP_TYPE_RXIP)
130		QETH_CARD_TEXT(card, 2, "delrxip");
131	else if (tmp_addr->type == QETH_IP_TYPE_VIPA)
132		QETH_CARD_TEXT(card, 2, "delvipa");
133	else
134		QETH_CARD_TEXT(card, 2, "delip");
135
136	if (tmp_addr->proto == QETH_PROT_IPV4)
137		QETH_CARD_HEX(card, 4, &tmp_addr->u.a4.addr, 4);
138	else {
139		QETH_CARD_HEX(card, 4, &tmp_addr->u.a6.addr, 8);
140		QETH_CARD_HEX(card, 4, ((char *)&tmp_addr->u.a6.addr) + 8, 8);
141	}
142
143	addr = qeth_l3_find_addr_by_ip(card, tmp_addr);
144	if (!addr || !qeth_l3_addr_match_all(addr, tmp_addr))
145		return -ENOENT;
146
147	addr->ref_counter--;
148	if (addr->type == QETH_IP_TYPE_NORMAL && addr->ref_counter > 0)
149		return rc;
150
151	if (qeth_card_hw_is_reachable(card))
152		rc = qeth_l3_deregister_addr_entry(card, addr);
153
154	hash_del(&addr->hnode);
155	kfree(addr);
156
157	return rc;
158}
159
160static int qeth_l3_add_ip(struct qeth_card *card, struct qeth_ipaddr *tmp_addr)
161{
162	int rc = 0;
163	struct qeth_ipaddr *addr;
164	char buf[40];
165
166	if (tmp_addr->type == QETH_IP_TYPE_RXIP)
167		QETH_CARD_TEXT(card, 2, "addrxip");
168	else if (tmp_addr->type == QETH_IP_TYPE_VIPA)
169		QETH_CARD_TEXT(card, 2, "addvipa");
170	else
171		QETH_CARD_TEXT(card, 2, "addip");
172
173	if (tmp_addr->proto == QETH_PROT_IPV4)
174		QETH_CARD_HEX(card, 4, &tmp_addr->u.a4.addr, 4);
175	else {
176		QETH_CARD_HEX(card, 4, &tmp_addr->u.a6.addr, 8);
177		QETH_CARD_HEX(card, 4, ((char *)&tmp_addr->u.a6.addr) + 8, 8);
178	}
179
180	addr = qeth_l3_find_addr_by_ip(card, tmp_addr);
181	if (addr) {
182		if (tmp_addr->type != QETH_IP_TYPE_NORMAL)
183			return -EADDRINUSE;
184		if (qeth_l3_addr_match_all(addr, tmp_addr)) {
185			addr->ref_counter++;
186			return 0;
187		}
188		qeth_l3_ipaddr_to_string(tmp_addr->proto, (u8 *)&tmp_addr->u,
189					 buf);
190		dev_warn(&card->gdev->dev,
191			 "Registering IP address %s failed\n", buf);
192		return -EADDRINUSE;
193	} else {
194		addr = kmemdup(tmp_addr, sizeof(*tmp_addr), GFP_KERNEL);
195		if (!addr)
196			return -ENOMEM;
197
198		if (qeth_l3_is_addr_covered_by_ipato(card, addr)) {
199			QETH_CARD_TEXT(card, 2, "tkovaddr");
200			addr->ipato = 1;
201		}
202		hash_add(card->ip_htable, &addr->hnode,
203				qeth_l3_ipaddr_hash(addr));
204
205		if (!qeth_card_hw_is_reachable(card)) {
206			addr->disp_flag = QETH_DISP_ADDR_ADD;
207			return 0;
208		}
209
210		rc = qeth_l3_register_addr_entry(card, addr);
211
212		if (!rc || rc == -EADDRINUSE || rc == -ENETDOWN) {
213			addr->disp_flag = QETH_DISP_ADDR_DO_NOTHING;
214		} else {
215			hash_del(&addr->hnode);
216			kfree(addr);
217		}
218	}
219	return rc;
220}
221
222static int qeth_l3_modify_ip(struct qeth_card *card, struct qeth_ipaddr *addr,
223			     bool add)
224{
225	int rc;
226
227	mutex_lock(&card->ip_lock);
228	rc = add ? qeth_l3_add_ip(card, addr) : qeth_l3_delete_ip(card, addr);
229	mutex_unlock(&card->ip_lock);
230
231	return rc;
232}
233
234static void qeth_l3_drain_rx_mode_cache(struct qeth_card *card)
235{
236	struct qeth_ipaddr *addr;
237	struct hlist_node *tmp;
238	int i;
239
240	hash_for_each_safe(card->rx_mode_addrs, i, tmp, addr, hnode) {
241		hash_del(&addr->hnode);
242		kfree(addr);
243	}
244}
245
246static void qeth_l3_clear_ip_htable(struct qeth_card *card, int recover)
247{
248	struct qeth_ipaddr *addr;
249	struct hlist_node *tmp;
250	int i;
251
252	QETH_CARD_TEXT(card, 4, "clearip");
253
254	mutex_lock(&card->ip_lock);
255
256	hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) {
257		if (!recover) {
258			hash_del(&addr->hnode);
259			kfree(addr);
260		} else {
261			/* prepare for recovery */
262			addr->disp_flag = QETH_DISP_ADDR_ADD;
263		}
264	}
265
266	mutex_unlock(&card->ip_lock);
267}
268
269static void qeth_l3_recover_ip(struct qeth_card *card)
270{
271	struct qeth_ipaddr *addr;
272	struct hlist_node *tmp;
273	int i;
274	int rc;
275
276	QETH_CARD_TEXT(card, 4, "recovrip");
277
278	mutex_lock(&card->ip_lock);
279
280	hash_for_each_safe(card->ip_htable, i, tmp, addr, hnode) {
281		if (addr->disp_flag == QETH_DISP_ADDR_ADD) {
282			rc = qeth_l3_register_addr_entry(card, addr);
283
284			if (!rc || rc == -EADDRINUSE || rc == -ENETDOWN) {
285				/* keep it in the records */
286				addr->disp_flag = QETH_DISP_ADDR_DO_NOTHING;
287			} else {
288				/* bad address */
289				hash_del(&addr->hnode);
290				kfree(addr);
291			}
292		}
293	}
294
295	mutex_unlock(&card->ip_lock);
296}
297
298static int qeth_l3_setdelip_cb(struct qeth_card *card, struct qeth_reply *reply,
299			       unsigned long data)
300{
301	struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
302
303	switch (cmd->hdr.return_code) {
304	case IPA_RC_SUCCESS:
305		return 0;
306	case IPA_RC_DUPLICATE_IP_ADDRESS:
307		return -EADDRINUSE;
308	case IPA_RC_MC_ADDR_NOT_FOUND:
309		return -ENOENT;
310	case IPA_RC_LAN_OFFLINE:
311		return -ENETDOWN;
312	default:
313		return -EIO;
314	}
315}
316
317static int qeth_l3_send_setdelmc(struct qeth_card *card,
318				 struct qeth_ipaddr *addr,
319				 enum qeth_ipa_cmds ipacmd)
320{
321	struct qeth_cmd_buffer *iob;
322	struct qeth_ipa_cmd *cmd;
323
324	QETH_CARD_TEXT(card, 4, "setdelmc");
325
326	iob = qeth_ipa_alloc_cmd(card, ipacmd, addr->proto,
327				 IPA_DATA_SIZEOF(setdelipm));
328	if (!iob)
329		return -ENOMEM;
330	cmd = __ipa_cmd(iob);
331	if (addr->proto == QETH_PROT_IPV6) {
332		cmd->data.setdelipm.ip = addr->u.a6.addr;
333		ipv6_eth_mc_map(&addr->u.a6.addr, cmd->data.setdelipm.mac);
334	} else {
335		cmd->data.setdelipm.ip.s6_addr32[3] = addr->u.a4.addr;
336		ip_eth_mc_map(addr->u.a4.addr, cmd->data.setdelipm.mac);
337	}
338
339	return qeth_send_ipa_cmd(card, iob, qeth_l3_setdelip_cb, NULL);
340}
341
342static void qeth_l3_set_ipv6_prefix(struct in6_addr *prefix, unsigned int len)
343{
344	unsigned int i = 0;
345
346	while (len && i < 4) {
347		int mask_len = min_t(int, len, 32);
348
349		prefix->s6_addr32[i] = inet_make_mask(mask_len);
350		len -= mask_len;
351		i++;
352	}
353}
354
355static u32 qeth_l3_get_setdelip_flags(struct qeth_ipaddr *addr, bool set)
356{
357	switch (addr->type) {
358	case QETH_IP_TYPE_RXIP:
359		return (set) ? QETH_IPA_SETIP_TAKEOVER_FLAG : 0;
360	case QETH_IP_TYPE_VIPA:
361		return (set) ? QETH_IPA_SETIP_VIPA_FLAG :
362			       QETH_IPA_DELIP_VIPA_FLAG;
363	default:
364		return (set && addr->ipato) ? QETH_IPA_SETIP_TAKEOVER_FLAG : 0;
365	}
366}
367
368static int qeth_l3_send_setdelip(struct qeth_card *card,
369				 struct qeth_ipaddr *addr,
370				 enum qeth_ipa_cmds ipacmd)
371{
372	struct qeth_cmd_buffer *iob;
373	struct qeth_ipa_cmd *cmd;
374	u32 flags;
375
376	QETH_CARD_TEXT(card, 4, "setdelip");
377
378	iob = qeth_ipa_alloc_cmd(card, ipacmd, addr->proto,
379				 IPA_DATA_SIZEOF(setdelip6));
380	if (!iob)
381		return -ENOMEM;
382	cmd = __ipa_cmd(iob);
383
384	flags = qeth_l3_get_setdelip_flags(addr, ipacmd == IPA_CMD_SETIP);
385	QETH_CARD_TEXT_(card, 4, "flags%02X", flags);
386
387	if (addr->proto == QETH_PROT_IPV6) {
388		cmd->data.setdelip6.addr = addr->u.a6.addr;
389		qeth_l3_set_ipv6_prefix(&cmd->data.setdelip6.prefix,
390					addr->u.a6.pfxlen);
391		cmd->data.setdelip6.flags = flags;
392	} else {
393		cmd->data.setdelip4.addr = addr->u.a4.addr;
394		cmd->data.setdelip4.mask = addr->u.a4.mask;
395		cmd->data.setdelip4.flags = flags;
396	}
397
398	return qeth_send_ipa_cmd(card, iob, qeth_l3_setdelip_cb, NULL);
399}
400
401static int qeth_l3_send_setrouting(struct qeth_card *card,
402	enum qeth_routing_types type, enum qeth_prot_versions prot)
403{
404	int rc;
405	struct qeth_ipa_cmd *cmd;
406	struct qeth_cmd_buffer *iob;
407
408	QETH_CARD_TEXT(card, 4, "setroutg");
409	iob = qeth_ipa_alloc_cmd(card, IPA_CMD_SETRTG, prot,
410				 IPA_DATA_SIZEOF(setrtg));
411	if (!iob)
412		return -ENOMEM;
413	cmd = __ipa_cmd(iob);
414	cmd->data.setrtg.type = (type);
415	rc = qeth_send_ipa_cmd(card, iob, NULL, NULL);
416
417	return rc;
418}
419
420static int qeth_l3_correct_routing_type(struct qeth_card *card,
421		enum qeth_routing_types *type, enum qeth_prot_versions prot)
422{
423	if (IS_IQD(card)) {
424		switch (*type) {
425		case NO_ROUTER:
426		case PRIMARY_CONNECTOR:
427		case SECONDARY_CONNECTOR:
428		case MULTICAST_ROUTER:
429			return 0;
430		default:
431			goto out_inval;
432		}
433	} else {
434		switch (*type) {
435		case NO_ROUTER:
436		case PRIMARY_ROUTER:
437		case SECONDARY_ROUTER:
438			return 0;
439		case MULTICAST_ROUTER:
440			if (qeth_is_ipafunc_supported(card, prot,
441						      IPA_OSA_MC_ROUTER))
442				return 0;
443		default:
444			goto out_inval;
445		}
446	}
447out_inval:
448	*type = NO_ROUTER;
449	return -EINVAL;
450}
451
452int qeth_l3_setrouting_v4(struct qeth_card *card)
453{
454	int rc;
455
456	QETH_CARD_TEXT(card, 3, "setrtg4");
457
458	rc = qeth_l3_correct_routing_type(card, &card->options.route4.type,
459				  QETH_PROT_IPV4);
460	if (rc)
461		return rc;
462
463	rc = qeth_l3_send_setrouting(card, card->options.route4.type,
464				  QETH_PROT_IPV4);
465	if (rc) {
466		card->options.route4.type = NO_ROUTER;
467		QETH_DBF_MESSAGE(2, "Error (%#06x) while setting routing type on device %x. Type set to 'no router'.\n",
468				 rc, CARD_DEVID(card));
469	}
470	return rc;
471}
472
473int qeth_l3_setrouting_v6(struct qeth_card *card)
474{
475	int rc = 0;
476
477	QETH_CARD_TEXT(card, 3, "setrtg6");
478
479	if (!qeth_is_supported(card, IPA_IPV6))
480		return 0;
481	rc = qeth_l3_correct_routing_type(card, &card->options.route6.type,
482				  QETH_PROT_IPV6);
483	if (rc)
484		return rc;
485
486	rc = qeth_l3_send_setrouting(card, card->options.route6.type,
487				  QETH_PROT_IPV6);
488	if (rc) {
489		card->options.route6.type = NO_ROUTER;
490		QETH_DBF_MESSAGE(2, "Error (%#06x) while setting routing type on device %x. Type set to 'no router'.\n",
491				 rc, CARD_DEVID(card));
492	}
493	return rc;
494}
495
496/*
497 * IP address takeover related functions
498 */
499
500/**
501 * qeth_l3_update_ipato() - Update 'takeover' property, for all NORMAL IPs.
502 *
503 * Caller must hold ip_lock.
504 */
505void qeth_l3_update_ipato(struct qeth_card *card)
506{
507	struct qeth_ipaddr *addr;
508	unsigned int i;
509
510	hash_for_each(card->ip_htable, i, addr, hnode) {
511		if (addr->type != QETH_IP_TYPE_NORMAL)
512			continue;
513		addr->ipato = qeth_l3_is_addr_covered_by_ipato(card, addr);
514	}
515}
516
517static void qeth_l3_clear_ipato_list(struct qeth_card *card)
518{
519	struct qeth_ipato_entry *ipatoe, *tmp;
520
521	mutex_lock(&card->ip_lock);
522
523	list_for_each_entry_safe(ipatoe, tmp, &card->ipato.entries, entry) {
524		list_del(&ipatoe->entry);
525		kfree(ipatoe);
526	}
527
528	qeth_l3_update_ipato(card);
529	mutex_unlock(&card->ip_lock);
530}
531
532int qeth_l3_add_ipato_entry(struct qeth_card *card,
533				struct qeth_ipato_entry *new)
534{
535	struct qeth_ipato_entry *ipatoe;
536	int rc = 0;
537
538	QETH_CARD_TEXT(card, 2, "addipato");
539
540	mutex_lock(&card->ip_lock);
541
542	list_for_each_entry(ipatoe, &card->ipato.entries, entry) {
543		if (ipatoe->proto != new->proto)
544			continue;
545		if (!memcmp(ipatoe->addr, new->addr,
546			    (ipatoe->proto == QETH_PROT_IPV4) ? 4 : 16) &&
547		    (ipatoe->mask_bits == new->mask_bits)) {
548			rc = -EEXIST;
549			break;
550		}
551	}
552
553	if (!rc) {
554		list_add_tail(&new->entry, &card->ipato.entries);
555		qeth_l3_update_ipato(card);
556	}
557
558	mutex_unlock(&card->ip_lock);
559
560	return rc;
561}
562
563int qeth_l3_del_ipato_entry(struct qeth_card *card,
564			    enum qeth_prot_versions proto, u8 *addr,
565			    unsigned int mask_bits)
566{
567	struct qeth_ipato_entry *ipatoe, *tmp;
568	int rc = -ENOENT;
569
570	QETH_CARD_TEXT(card, 2, "delipato");
571
572	mutex_lock(&card->ip_lock);
573
574	list_for_each_entry_safe(ipatoe, tmp, &card->ipato.entries, entry) {
575		if (ipatoe->proto != proto)
576			continue;
577		if (!memcmp(ipatoe->addr, addr,
578			    (proto == QETH_PROT_IPV4) ? 4 : 16) &&
579		    (ipatoe->mask_bits == mask_bits)) {
580			list_del(&ipatoe->entry);
581			qeth_l3_update_ipato(card);
582			kfree(ipatoe);
583			rc = 0;
584		}
585	}
586
587	mutex_unlock(&card->ip_lock);
588
589	return rc;
590}
591
592int qeth_l3_modify_rxip_vipa(struct qeth_card *card, bool add, const u8 *ip,
593			     enum qeth_ip_types type,
594			     enum qeth_prot_versions proto)
595{
596	struct qeth_ipaddr addr;
597
598	qeth_l3_init_ipaddr(&addr, type, proto);
599	if (proto == QETH_PROT_IPV4)
600		memcpy(&addr.u.a4.addr, ip, 4);
601	else
602		memcpy(&addr.u.a6.addr, ip, 16);
603
604	return qeth_l3_modify_ip(card, &addr, add);
605}
606
607int qeth_l3_modify_hsuid(struct qeth_card *card, bool add)
608{
609	struct qeth_ipaddr addr;
610	unsigned int i;
611
612	qeth_l3_init_ipaddr(&addr, QETH_IP_TYPE_NORMAL, QETH_PROT_IPV6);
613	addr.u.a6.addr.s6_addr[0] = 0xfe;
614	addr.u.a6.addr.s6_addr[1] = 0x80;
615	for (i = 0; i < 8; i++)
616		addr.u.a6.addr.s6_addr[8+i] = card->options.hsuid[i];
617
618	return qeth_l3_modify_ip(card, &addr, add);
619}
620
621static int qeth_l3_register_addr_entry(struct qeth_card *card,
622				struct qeth_ipaddr *addr)
623{
624	char buf[50];
625	int rc = 0;
626	int cnt = 3;
627
628	if (card->options.sniffer)
629		return 0;
630
631	if (addr->proto == QETH_PROT_IPV4) {
632		QETH_CARD_TEXT(card, 2, "setaddr4");
633		QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int));
634	} else if (addr->proto == QETH_PROT_IPV6) {
635		QETH_CARD_TEXT(card, 2, "setaddr6");
636		QETH_CARD_HEX(card, 3, &addr->u.a6.addr, 8);
637		QETH_CARD_HEX(card, 3, ((char *)&addr->u.a6.addr) + 8, 8);
638	} else {
639		QETH_CARD_TEXT(card, 2, "setaddr?");
640		QETH_CARD_HEX(card, 3, addr, sizeof(struct qeth_ipaddr));
641	}
642	do {
643		if (addr->is_multicast)
644			rc =  qeth_l3_send_setdelmc(card, addr, IPA_CMD_SETIPM);
645		else
646			rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_SETIP);
647		if (rc)
648			QETH_CARD_TEXT(card, 2, "failed");
649	} while ((--cnt > 0) && rc);
650	if (rc) {
651		QETH_CARD_TEXT(card, 2, "FAILED");
652		qeth_l3_ipaddr_to_string(addr->proto, (u8 *)&addr->u, buf);
653		dev_warn(&card->gdev->dev,
654			"Registering IP address %s failed\n", buf);
655	}
656	return rc;
657}
658
659static int qeth_l3_deregister_addr_entry(struct qeth_card *card,
660						struct qeth_ipaddr *addr)
661{
662	int rc = 0;
663
664	if (card->options.sniffer)
665		return 0;
666
667	if (addr->proto == QETH_PROT_IPV4) {
668		QETH_CARD_TEXT(card, 2, "deladdr4");
669		QETH_CARD_HEX(card, 3, &addr->u.a4.addr, sizeof(int));
670	} else if (addr->proto == QETH_PROT_IPV6) {
671		QETH_CARD_TEXT(card, 2, "deladdr6");
672		QETH_CARD_HEX(card, 3, &addr->u.a6.addr, 8);
673		QETH_CARD_HEX(card, 3, ((char *)&addr->u.a6.addr) + 8, 8);
674	} else {
675		QETH_CARD_TEXT(card, 2, "deladdr?");
676		QETH_CARD_HEX(card, 3, addr, sizeof(struct qeth_ipaddr));
677	}
678	if (addr->is_multicast)
679		rc = qeth_l3_send_setdelmc(card, addr, IPA_CMD_DELIPM);
680	else
681		rc = qeth_l3_send_setdelip(card, addr, IPA_CMD_DELIP);
682	if (rc)
683		QETH_CARD_TEXT(card, 2, "failed");
684
685	return rc;
686}
687
688static int qeth_l3_setadapter_parms(struct qeth_card *card)
689{
690	int rc = 0;
691
692	QETH_CARD_TEXT(card, 2, "setadprm");
693
694	if (qeth_adp_supported(card, IPA_SETADP_ALTER_MAC_ADDRESS)) {
695		rc = qeth_setadpparms_change_macaddr(card);
696		if (rc)
697			dev_warn(&card->gdev->dev, "Reading the adapter MAC"
698				" address failed\n");
699	}
700
701	return rc;
702}
703
704static int qeth_l3_start_ipa_arp_processing(struct qeth_card *card)
705{
706	int rc;
707
708	QETH_CARD_TEXT(card, 3, "ipaarp");
709
710	if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
711		dev_info(&card->gdev->dev,
712			 "ARP processing not supported on %s!\n",
713			 netdev_name(card->dev));
714		return 0;
715	}
716	rc = qeth_send_simple_setassparms(card, IPA_ARP_PROCESSING,
717					  IPA_CMD_ASS_START, NULL);
718	if (rc) {
719		dev_warn(&card->gdev->dev,
720			 "Starting ARP processing support for %s failed\n",
721			 netdev_name(card->dev));
722	}
723	return rc;
724}
725
726static int qeth_l3_start_ipa_source_mac(struct qeth_card *card)
727{
728	int rc;
729
730	QETH_CARD_TEXT(card, 3, "stsrcmac");
731
732	if (!qeth_is_supported(card, IPA_SOURCE_MAC)) {
733		dev_info(&card->gdev->dev,
734			 "Inbound source MAC-address not supported on %s\n",
735			 netdev_name(card->dev));
736		return -EOPNOTSUPP;
737	}
738
739	rc = qeth_send_simple_setassparms(card, IPA_SOURCE_MAC,
740					  IPA_CMD_ASS_START, NULL);
741	if (rc)
742		dev_warn(&card->gdev->dev,
743			 "Starting source MAC-address support for %s failed\n",
744			 netdev_name(card->dev));
745	return rc;
746}
747
748static int qeth_l3_start_ipa_vlan(struct qeth_card *card)
749{
750	int rc = 0;
751
752	QETH_CARD_TEXT(card, 3, "strtvlan");
753
754	if (!qeth_is_supported(card, IPA_FULL_VLAN)) {
755		dev_info(&card->gdev->dev,
756			 "VLAN not supported on %s\n", netdev_name(card->dev));
757		return -EOPNOTSUPP;
758	}
759
760	rc = qeth_send_simple_setassparms(card, IPA_VLAN_PRIO,
761					  IPA_CMD_ASS_START, NULL);
762	if (rc) {
763		dev_warn(&card->gdev->dev,
764			 "Starting VLAN support for %s failed\n",
765			 netdev_name(card->dev));
766	} else {
767		dev_info(&card->gdev->dev, "VLAN enabled\n");
768	}
769	return rc;
770}
771
772static int qeth_l3_start_ipa_multicast(struct qeth_card *card)
773{
774	int rc;
775
776	QETH_CARD_TEXT(card, 3, "stmcast");
777
778	if (!qeth_is_supported(card, IPA_MULTICASTING)) {
779		dev_info(&card->gdev->dev,
780			 "Multicast not supported on %s\n",
781			 netdev_name(card->dev));
782		return -EOPNOTSUPP;
783	}
784
785	rc = qeth_send_simple_setassparms(card, IPA_MULTICASTING,
786					  IPA_CMD_ASS_START, NULL);
787	if (rc) {
788		dev_warn(&card->gdev->dev,
789			 "Starting multicast support for %s failed\n",
790			 netdev_name(card->dev));
791	} else {
792		dev_info(&card->gdev->dev, "Multicast enabled\n");
793		card->dev->flags |= IFF_MULTICAST;
794	}
795	return rc;
796}
797
798static int qeth_l3_softsetup_ipv6(struct qeth_card *card)
799{
800	u32 ipv6_data = 3;
801	int rc;
802
803	QETH_CARD_TEXT(card, 3, "softipv6");
804
805	if (IS_IQD(card))
806		goto out;
807
808	rc = qeth_send_simple_setassparms(card, IPA_IPV6, IPA_CMD_ASS_START,
809					  &ipv6_data);
810	if (rc) {
811		dev_err(&card->gdev->dev,
812			"Activating IPv6 support for %s failed\n",
813			netdev_name(card->dev));
814		return rc;
815	}
816	rc = qeth_send_simple_setassparms_v6(card, IPA_IPV6, IPA_CMD_ASS_START,
817					     NULL);
818	if (rc) {
819		dev_err(&card->gdev->dev,
820			"Activating IPv6 support for %s failed\n",
821			 netdev_name(card->dev));
822		return rc;
823	}
824	rc = qeth_send_simple_setassparms_v6(card, IPA_PASSTHRU,
825					     IPA_CMD_ASS_START, NULL);
826	if (rc) {
827		dev_warn(&card->gdev->dev,
828			 "Enabling the passthrough mode for %s failed\n",
829			 netdev_name(card->dev));
830		return rc;
831	}
832out:
833	dev_info(&card->gdev->dev, "IPV6 enabled\n");
834	return 0;
835}
836
837static int qeth_l3_start_ipa_ipv6(struct qeth_card *card)
838{
839	QETH_CARD_TEXT(card, 3, "strtipv6");
840
841	if (!qeth_is_supported(card, IPA_IPV6)) {
842		dev_info(&card->gdev->dev,
843			 "IPv6 not supported on %s\n", netdev_name(card->dev));
844		return 0;
845	}
846	return qeth_l3_softsetup_ipv6(card);
847}
848
849static int qeth_l3_start_ipa_broadcast(struct qeth_card *card)
850{
851	u32 filter_data = 1;
852	int rc;
853
854	QETH_CARD_TEXT(card, 3, "stbrdcst");
855	card->info.broadcast_capable = 0;
856	if (!qeth_is_supported(card, IPA_FILTERING)) {
857		dev_info(&card->gdev->dev,
858			 "Broadcast not supported on %s\n",
859			 netdev_name(card->dev));
860		rc = -EOPNOTSUPP;
861		goto out;
862	}
863	rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
864					  IPA_CMD_ASS_START, NULL);
865	if (rc) {
866		dev_warn(&card->gdev->dev,
867			 "Enabling broadcast filtering for %s failed\n",
868			 netdev_name(card->dev));
869		goto out;
870	}
871
872	rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
873					  IPA_CMD_ASS_CONFIGURE, &filter_data);
874	if (rc) {
875		dev_warn(&card->gdev->dev,
876			 "Setting up broadcast filtering for %s failed\n",
877			 netdev_name(card->dev));
878		goto out;
879	}
880	card->info.broadcast_capable = QETH_BROADCAST_WITH_ECHO;
881	dev_info(&card->gdev->dev, "Broadcast enabled\n");
882	rc = qeth_send_simple_setassparms(card, IPA_FILTERING,
883					  IPA_CMD_ASS_ENABLE, &filter_data);
884	if (rc) {
885		dev_warn(&card->gdev->dev,
886			 "Setting up broadcast echo filtering for %s failed\n",
887			 netdev_name(card->dev));
888		goto out;
889	}
890	card->info.broadcast_capable = QETH_BROADCAST_WITHOUT_ECHO;
891out:
892	if (card->info.broadcast_capable)
893		card->dev->flags |= IFF_BROADCAST;
894	else
895		card->dev->flags &= ~IFF_BROADCAST;
896	return rc;
897}
898
899static void qeth_l3_start_ipassists(struct qeth_card *card)
900{
901	QETH_CARD_TEXT(card, 3, "strtipas");
902
903	qeth_l3_start_ipa_arp_processing(card);	/* go on*/
904	qeth_l3_start_ipa_source_mac(card);	/* go on*/
905	qeth_l3_start_ipa_vlan(card);		/* go on*/
906	qeth_l3_start_ipa_multicast(card);		/* go on*/
907	qeth_l3_start_ipa_ipv6(card);		/* go on*/
908	qeth_l3_start_ipa_broadcast(card);		/* go on*/
909}
910
911static int qeth_l3_iqd_read_initial_mac_cb(struct qeth_card *card,
912		struct qeth_reply *reply, unsigned long data)
913{
914	struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
915
916	if (cmd->hdr.return_code)
917		return -EIO;
918	if (!is_valid_ether_addr(cmd->data.create_destroy_addr.mac_addr))
919		return -EADDRNOTAVAIL;
920
921	ether_addr_copy(card->dev->dev_addr,
922			cmd->data.create_destroy_addr.mac_addr);
923	return 0;
924}
925
926static int qeth_l3_iqd_read_initial_mac(struct qeth_card *card)
927{
928	int rc = 0;
929	struct qeth_cmd_buffer *iob;
930
931	QETH_CARD_TEXT(card, 2, "hsrmac");
932
933	iob = qeth_ipa_alloc_cmd(card, IPA_CMD_CREATE_ADDR, QETH_PROT_IPV6,
934				 IPA_DATA_SIZEOF(create_destroy_addr));
935	if (!iob)
936		return -ENOMEM;
937
938	rc = qeth_send_ipa_cmd(card, iob, qeth_l3_iqd_read_initial_mac_cb,
939				NULL);
940	return rc;
941}
942
943static int qeth_l3_get_unique_id_cb(struct qeth_card *card,
944		struct qeth_reply *reply, unsigned long data)
945{
946	struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
947	u16 *uid = reply->param;
948
949	if (cmd->hdr.return_code == 0) {
950		*uid = cmd->data.create_destroy_addr.uid;
951		return 0;
952	}
953
954	dev_warn(&card->gdev->dev, "The network adapter failed to generate a unique ID\n");
955	return -EIO;
956}
957
958static u16 qeth_l3_get_unique_id(struct qeth_card *card, u16 uid)
959{
960	struct qeth_cmd_buffer *iob;
961
962	QETH_CARD_TEXT(card, 2, "guniqeid");
963
964	if (!qeth_is_supported(card, IPA_IPV6))
965		goto out;
966
967	iob = qeth_ipa_alloc_cmd(card, IPA_CMD_CREATE_ADDR, QETH_PROT_IPV6,
968				 IPA_DATA_SIZEOF(create_destroy_addr));
969	if (!iob)
970		goto out;
971
972	__ipa_cmd(iob)->data.create_destroy_addr.uid = uid;
973	qeth_send_ipa_cmd(card, iob, qeth_l3_get_unique_id_cb, &uid);
974
975out:
976	return uid;
977}
978
979static int
980qeth_diags_trace_cb(struct qeth_card *card, struct qeth_reply *reply,
981			    unsigned long data)
982{
983	struct qeth_ipa_cmd	   *cmd;
984	__u16 rc;
985
986	QETH_CARD_TEXT(card, 2, "diastrcb");
987
988	cmd = (struct qeth_ipa_cmd *)data;
989	rc = cmd->hdr.return_code;
990	if (rc)
991		QETH_CARD_TEXT_(card, 2, "dxter%x", rc);
992	switch (cmd->data.diagass.action) {
993	case QETH_DIAGS_CMD_TRACE_QUERY:
994		break;
995	case QETH_DIAGS_CMD_TRACE_DISABLE:
996		switch (rc) {
997		case 0:
998		case IPA_RC_INVALID_SUBCMD:
999			card->info.promisc_mode = SET_PROMISC_MODE_OFF;
1000			dev_info(&card->gdev->dev, "The HiperSockets network "
1001				"traffic analyzer is deactivated\n");
1002			break;
1003		default:
1004			break;
1005		}
1006		break;
1007	case QETH_DIAGS_CMD_TRACE_ENABLE:
1008		switch (rc) {
1009		case 0:
1010			card->info.promisc_mode = SET_PROMISC_MODE_ON;
1011			dev_info(&card->gdev->dev, "The HiperSockets network "
1012				"traffic analyzer is activated\n");
1013			break;
1014		case IPA_RC_HARDWARE_AUTH_ERROR:
1015			dev_warn(&card->gdev->dev, "The device is not "
1016				"authorized to run as a HiperSockets network "
1017				"traffic analyzer\n");
1018			break;
1019		case IPA_RC_TRACE_ALREADY_ACTIVE:
1020			dev_warn(&card->gdev->dev, "A HiperSockets "
1021				"network traffic analyzer is already "
1022				"active in the HiperSockets LAN\n");
1023			break;
1024		default:
1025			break;
1026		}
1027		break;
1028	default:
1029		QETH_DBF_MESSAGE(2, "Unknown sniffer action (%#06x) on device %x\n",
1030				 cmd->data.diagass.action, CARD_DEVID(card));
1031	}
1032
1033	return rc ? -EIO : 0;
1034}
1035
1036static int
1037qeth_diags_trace(struct qeth_card *card, enum qeth_diags_trace_cmds diags_cmd)
1038{
1039	struct qeth_cmd_buffer *iob;
1040	struct qeth_ipa_cmd    *cmd;
1041
1042	QETH_CARD_TEXT(card, 2, "diagtrac");
1043
1044	iob = qeth_get_diag_cmd(card, QETH_DIAGS_CMD_TRACE, 0);
1045	if (!iob)
1046		return -ENOMEM;
1047	cmd = __ipa_cmd(iob);
1048	cmd->data.diagass.type = QETH_DIAGS_TYPE_HIPERSOCKET;
1049	cmd->data.diagass.action = diags_cmd;
1050	return qeth_send_ipa_cmd(card, iob, qeth_diags_trace_cb, NULL);
1051}
1052
1053static int qeth_l3_add_mcast_rtnl(struct net_device *dev, int vid, void *arg)
1054{
1055	struct qeth_card *card = arg;
1056	struct inet6_dev *in6_dev;
1057	struct in_device *in4_dev;
1058	struct qeth_ipaddr *ipm;
1059	struct qeth_ipaddr tmp;
1060	struct ip_mc_list *im4;
1061	struct ifmcaddr6 *im6;
1062
1063	QETH_CARD_TEXT(card, 4, "addmc");
1064
1065	if (!dev || !(dev->flags & IFF_UP))
1066		goto out;
1067
1068	in4_dev = __in_dev_get_rtnl(dev);
1069	if (!in4_dev)
1070		goto walk_ipv6;
1071
1072	qeth_l3_init_ipaddr(&tmp, QETH_IP_TYPE_NORMAL, QETH_PROT_IPV4);
1073	tmp.disp_flag = QETH_DISP_ADDR_ADD;
1074	tmp.is_multicast = 1;
1075
1076	for (im4 = rtnl_dereference(in4_dev->mc_list); im4 != NULL;
1077	     im4 = rtnl_dereference(im4->next_rcu)) {
1078		tmp.u.a4.addr = im4->multiaddr;
1079
1080		ipm = qeth_l3_find_addr_by_ip(card, &tmp);
1081		if (ipm) {
1082			/* for mcast, by-IP match means full match */
1083			ipm->disp_flag = QETH_DISP_ADDR_DO_NOTHING;
1084			continue;
1085		}
1086
1087		ipm = kmemdup(&tmp, sizeof(tmp), GFP_KERNEL);
1088		if (!ipm)
1089			continue;
1090
1091		hash_add(card->rx_mode_addrs, &ipm->hnode,
1092			 qeth_l3_ipaddr_hash(ipm));
1093	}
1094
1095walk_ipv6:
1096	if (!qeth_is_supported(card, IPA_IPV6))
1097		goto out;
1098
1099	in6_dev = __in6_dev_get(dev);
1100	if (!in6_dev)
1101		goto out;
1102
1103	qeth_l3_init_ipaddr(&tmp, QETH_IP_TYPE_NORMAL, QETH_PROT_IPV6);
1104	tmp.disp_flag = QETH_DISP_ADDR_ADD;
1105	tmp.is_multicast = 1;
1106
1107	read_lock_bh(&in6_dev->lock);
1108	for (im6 = in6_dev->mc_list; im6 != NULL; im6 = im6->next) {
1109		tmp.u.a6.addr = im6->mca_addr;
1110
1111		ipm = qeth_l3_find_addr_by_ip(card, &tmp);
1112		if (ipm) {
1113			/* for mcast, by-IP match means full match */
1114			ipm->disp_flag = QETH_DISP_ADDR_DO_NOTHING;
1115			continue;
1116		}
1117
1118		ipm = kmemdup(&tmp, sizeof(tmp), GFP_ATOMIC);
1119		if (!ipm)
1120			continue;
1121
1122		hash_add(card->rx_mode_addrs, &ipm->hnode,
1123			 qeth_l3_ipaddr_hash(ipm));
1124
1125	}
1126	read_unlock_bh(&in6_dev->lock);
1127
1128out:
1129	return 0;
1130}
1131
1132static int qeth_l3_vlan_rx_add_vid(struct net_device *dev,
1133				   __be16 proto, u16 vid)
1134{
1135	struct qeth_card *card = dev->ml_priv;
1136
1137	QETH_CARD_TEXT_(card, 4, "aid:%d", vid);
1138	return 0;
1139}
1140
1141static int qeth_l3_vlan_rx_kill_vid(struct net_device *dev,
1142				    __be16 proto, u16 vid)
1143{
1144	struct qeth_card *card = dev->ml_priv;
1145
1146	QETH_CARD_TEXT_(card, 4, "kid:%d", vid);
1147	return 0;
1148}
1149
1150static void qeth_l3_set_promisc_mode(struct qeth_card *card)
1151{
1152	bool enable = card->dev->flags & IFF_PROMISC;
1153
1154	if (card->info.promisc_mode == enable)
1155		return;
1156
1157	if (IS_VM_NIC(card)) {		/* Guestlan trace */
1158		if (qeth_adp_supported(card, IPA_SETADP_SET_PROMISC_MODE))
1159			qeth_setadp_promisc_mode(card, enable);
1160	} else if (card->options.sniffer &&	/* HiperSockets trace */
1161		   qeth_adp_supported(card, IPA_SETADP_SET_DIAG_ASSIST)) {
1162		if (enable) {
1163			QETH_CARD_TEXT(card, 3, "+promisc");
1164			qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_ENABLE);
1165		} else {
1166			QETH_CARD_TEXT(card, 3, "-promisc");
1167			qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_DISABLE);
1168		}
1169	}
1170}
1171
1172static void qeth_l3_rx_mode_work(struct work_struct *work)
1173{
1174	struct qeth_card *card = container_of(work, struct qeth_card,
1175					      rx_mode_work);
1176	struct qeth_ipaddr *addr;
1177	struct hlist_node *tmp;
1178	int i, rc;
1179
1180	QETH_CARD_TEXT(card, 3, "setmulti");
1181
1182	if (!card->options.sniffer) {
1183		rtnl_lock();
1184		qeth_l3_add_mcast_rtnl(card->dev, 0, card);
1185		if (qeth_is_supported(card, IPA_FULL_VLAN))
1186			vlan_for_each(card->dev, qeth_l3_add_mcast_rtnl, card);
1187		rtnl_unlock();
1188
1189		hash_for_each_safe(card->rx_mode_addrs, i, tmp, addr, hnode) {
1190			switch (addr->disp_flag) {
1191			case QETH_DISP_ADDR_DELETE:
1192				rc = qeth_l3_deregister_addr_entry(card, addr);
1193				if (!rc || rc == -ENOENT) {
1194					hash_del(&addr->hnode);
1195					kfree(addr);
1196				}
1197				break;
1198			case QETH_DISP_ADDR_ADD:
1199				rc = qeth_l3_register_addr_entry(card, addr);
1200				if (rc && rc != -ENETDOWN) {
1201					hash_del(&addr->hnode);
1202					kfree(addr);
1203					break;
1204				}
1205				fallthrough;
1206			default:
1207				/* for next call to set_rx_mode(): */
1208				addr->disp_flag = QETH_DISP_ADDR_DELETE;
1209			}
1210		}
1211	}
1212
1213	qeth_l3_set_promisc_mode(card);
1214}
1215
1216static int qeth_l3_arp_makerc(u16 rc)
1217{
1218	switch (rc) {
1219	case IPA_RC_SUCCESS:
1220		return 0;
1221	case QETH_IPA_ARP_RC_NOTSUPP:
1222	case QETH_IPA_ARP_RC_Q_NOTSUPP:
1223		return -EOPNOTSUPP;
1224	case QETH_IPA_ARP_RC_OUT_OF_RANGE:
1225		return -EINVAL;
1226	case QETH_IPA_ARP_RC_Q_NO_DATA:
1227		return -ENOENT;
1228	default:
1229		return -EIO;
1230	}
1231}
1232
1233static int qeth_l3_arp_cmd_cb(struct qeth_card *card, struct qeth_reply *reply,
1234			      unsigned long data)
1235{
1236	struct qeth_ipa_cmd *cmd = (struct qeth_ipa_cmd *) data;
1237
1238	qeth_setassparms_cb(card, reply, data);
1239	return qeth_l3_arp_makerc(cmd->hdr.return_code);
1240}
1241
1242static int qeth_l3_arp_set_no_entries(struct qeth_card *card, int no_entries)
1243{
1244	struct qeth_cmd_buffer *iob;
1245	int rc;
1246
1247	QETH_CARD_TEXT(card, 3, "arpstnoe");
1248
1249	/*
1250	 * currently GuestLAN only supports the ARP assist function
1251	 * IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_SET_NO_ENTRIES;
1252	 * thus we say EOPNOTSUPP for this ARP function
1253	 */
1254	if (IS_VM_NIC(card))
1255		return -EOPNOTSUPP;
1256	if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
1257		return -EOPNOTSUPP;
1258	}
1259
1260	iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
1261				       IPA_CMD_ASS_ARP_SET_NO_ENTRIES,
1262				       SETASS_DATA_SIZEOF(flags_32bit),
1263				       QETH_PROT_IPV4);
1264	if (!iob)
1265		return -ENOMEM;
1266
1267	__ipa_cmd(iob)->data.setassparms.data.flags_32bit = (u32) no_entries;
1268	rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_cmd_cb, NULL);
1269	if (rc)
1270		QETH_DBF_MESSAGE(2, "Could not set number of ARP entries on device %x: %#x\n",
1271				 CARD_DEVID(card), rc);
1272	return rc;
1273}
1274
1275static __u32 get_arp_entry_size(struct qeth_card *card,
1276			struct qeth_arp_query_data *qdata,
1277			struct qeth_arp_entrytype *type, __u8 strip_entries)
1278{
1279	__u32 rc;
1280	__u8 is_hsi;
1281
1282	is_hsi = qdata->reply_bits == 5;
1283	if (type->ip == QETHARP_IP_ADDR_V4) {
1284		QETH_CARD_TEXT(card, 4, "arpev4");
1285		if (strip_entries) {
1286			rc = is_hsi ? sizeof(struct qeth_arp_qi_entry5_short) :
1287				sizeof(struct qeth_arp_qi_entry7_short);
1288		} else {
1289			rc = is_hsi ? sizeof(struct qeth_arp_qi_entry5) :
1290				sizeof(struct qeth_arp_qi_entry7);
1291		}
1292	} else if (type->ip == QETHARP_IP_ADDR_V6) {
1293		QETH_CARD_TEXT(card, 4, "arpev6");
1294		if (strip_entries) {
1295			rc = is_hsi ?
1296				sizeof(struct qeth_arp_qi_entry5_short_ipv6) :
1297				sizeof(struct qeth_arp_qi_entry7_short_ipv6);
1298		} else {
1299			rc = is_hsi ?
1300				sizeof(struct qeth_arp_qi_entry5_ipv6) :
1301				sizeof(struct qeth_arp_qi_entry7_ipv6);
1302		}
1303	} else {
1304		QETH_CARD_TEXT(card, 4, "arpinv");
1305		rc = 0;
1306	}
1307
1308	return rc;
1309}
1310
1311static int arpentry_matches_prot(struct qeth_arp_entrytype *type, __u16 prot)
1312{
1313	return (type->ip == QETHARP_IP_ADDR_V4 && prot == QETH_PROT_IPV4) ||
1314		(type->ip == QETHARP_IP_ADDR_V6 && prot == QETH_PROT_IPV6);
1315}
1316
1317static int qeth_l3_arp_query_cb(struct qeth_card *card,
1318		struct qeth_reply *reply, unsigned long data)
1319{
1320	struct qeth_ipa_cmd *cmd;
1321	struct qeth_arp_query_data *qdata;
1322	struct qeth_arp_query_info *qinfo;
1323	int e;
1324	int entrybytes_done;
1325	int stripped_bytes;
1326	__u8 do_strip_entries;
1327
1328	QETH_CARD_TEXT(card, 3, "arpquecb");
1329
1330	qinfo = (struct qeth_arp_query_info *) reply->param;
1331	cmd = (struct qeth_ipa_cmd *) data;
1332	QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.prot_version);
1333	if (cmd->hdr.return_code) {
1334		QETH_CARD_TEXT(card, 4, "arpcberr");
1335		QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.return_code);
1336		return qeth_l3_arp_makerc(cmd->hdr.return_code);
1337	}
1338	if (cmd->data.setassparms.hdr.return_code) {
1339		cmd->hdr.return_code = cmd->data.setassparms.hdr.return_code;
1340		QETH_CARD_TEXT(card, 4, "setaperr");
1341		QETH_CARD_TEXT_(card, 4, "%i", cmd->hdr.return_code);
1342		return qeth_l3_arp_makerc(cmd->hdr.return_code);
1343	}
1344	qdata = &cmd->data.setassparms.data.query_arp;
1345	QETH_CARD_TEXT_(card, 4, "anoen%i", qdata->no_entries);
1346
1347	do_strip_entries = (qinfo->mask_bits & QETH_QARP_STRIP_ENTRIES) > 0;
1348	stripped_bytes = do_strip_entries ? QETH_QARP_MEDIASPECIFIC_BYTES : 0;
1349	entrybytes_done = 0;
1350	for (e = 0; e < qdata->no_entries; ++e) {
1351		char *cur_entry;
1352		__u32 esize;
1353		struct qeth_arp_entrytype *etype;
1354
1355		cur_entry = &qdata->data + entrybytes_done;
1356		etype = &((struct qeth_arp_qi_entry5 *) cur_entry)->type;
1357		if (!arpentry_matches_prot(etype, cmd->hdr.prot_version)) {
1358			QETH_CARD_TEXT(card, 4, "pmis");
1359			QETH_CARD_TEXT_(card, 4, "%i", etype->ip);
1360			break;
1361		}
1362		esize = get_arp_entry_size(card, qdata, etype,
1363			do_strip_entries);
1364		QETH_CARD_TEXT_(card, 5, "esz%i", esize);
1365		if (!esize)
1366			break;
1367
1368		if ((qinfo->udata_len - qinfo->udata_offset) < esize) {
1369			QETH_CARD_TEXT_(card, 4, "qaer3%i", -ENOSPC);
1370			memset(qinfo->udata, 0, 4);
1371			return -ENOSPC;
1372		}
1373
1374		memcpy(qinfo->udata + qinfo->udata_offset,
1375			&qdata->data + entrybytes_done + stripped_bytes,
1376			esize);
1377		entrybytes_done += esize + stripped_bytes;
1378		qinfo->udata_offset += esize;
1379		++qinfo->no_entries;
1380	}
1381	/* check if all replies received ... */
1382	if (cmd->data.setassparms.hdr.seq_no <
1383	    cmd->data.setassparms.hdr.number_of_replies)
1384		return 1;
1385	QETH_CARD_TEXT_(card, 4, "nove%i", qinfo->no_entries);
1386	memcpy(qinfo->udata, &qinfo->no_entries, 4);
1387	/* keep STRIP_ENTRIES flag so the user program can distinguish
1388	 * stripped entries from normal ones */
1389	if (qinfo->mask_bits & QETH_QARP_STRIP_ENTRIES)
1390		qdata->reply_bits |= QETH_QARP_STRIP_ENTRIES;
1391	memcpy(qinfo->udata + QETH_QARP_MASK_OFFSET, &qdata->reply_bits, 2);
1392	QETH_CARD_TEXT_(card, 4, "rc%i", 0);
1393	return 0;
1394}
1395
1396static int qeth_l3_query_arp_cache_info(struct qeth_card *card,
1397	enum qeth_prot_versions prot,
1398	struct qeth_arp_query_info *qinfo)
1399{
1400	struct qeth_cmd_buffer *iob;
1401	struct qeth_ipa_cmd *cmd;
1402	int rc;
1403
1404	QETH_CARD_TEXT_(card, 3, "qarpipv%i", prot);
1405
1406	iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
1407				       IPA_CMD_ASS_ARP_QUERY_INFO,
1408				       SETASS_DATA_SIZEOF(query_arp), prot);
1409	if (!iob)
1410		return -ENOMEM;
1411	cmd = __ipa_cmd(iob);
1412	cmd->data.setassparms.data.query_arp.request_bits = 0x000F;
1413	rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_query_cb, qinfo);
1414	if (rc)
1415		QETH_DBF_MESSAGE(2, "Error while querying ARP cache on device %x: %#x\n",
1416				 CARD_DEVID(card), rc);
1417	return rc;
1418}
1419
1420static int qeth_l3_arp_query(struct qeth_card *card, char __user *udata)
1421{
1422	struct qeth_arp_query_info qinfo = {0, };
1423	int rc;
1424
1425	QETH_CARD_TEXT(card, 3, "arpquery");
1426
1427	if (!qeth_is_supported(card,/*IPA_QUERY_ARP_ADDR_INFO*/
1428			       IPA_ARP_PROCESSING)) {
1429		QETH_CARD_TEXT(card, 3, "arpqnsup");
1430		rc = -EOPNOTSUPP;
1431		goto out;
1432	}
1433	/* get size of userspace buffer and mask_bits -> 6 bytes */
1434	if (copy_from_user(&qinfo, udata, 6)) {
1435		rc = -EFAULT;
1436		goto out;
1437	}
1438	qinfo.udata = kzalloc(qinfo.udata_len, GFP_KERNEL);
1439	if (!qinfo.udata) {
1440		rc = -ENOMEM;
1441		goto out;
1442	}
1443	qinfo.udata_offset = QETH_QARP_ENTRIES_OFFSET;
1444	rc = qeth_l3_query_arp_cache_info(card, QETH_PROT_IPV4, &qinfo);
1445	if (rc) {
1446		if (copy_to_user(udata, qinfo.udata, 4))
1447			rc = -EFAULT;
1448		goto free_and_out;
1449	}
1450	if (qinfo.mask_bits & QETH_QARP_WITH_IPV6) {
1451		/* fails in case of GuestLAN QDIO mode */
1452		qeth_l3_query_arp_cache_info(card, QETH_PROT_IPV6, &qinfo);
1453	}
1454	if (copy_to_user(udata, qinfo.udata, qinfo.udata_len)) {
1455		QETH_CARD_TEXT(card, 4, "qactf");
1456		rc = -EFAULT;
1457		goto free_and_out;
1458	}
1459	QETH_CARD_TEXT(card, 4, "qacts");
1460
1461free_and_out:
1462	kfree(qinfo.udata);
1463out:
1464	return rc;
1465}
1466
1467static int qeth_l3_arp_modify_entry(struct qeth_card *card,
1468				    struct qeth_arp_cache_entry *entry,
1469				    enum qeth_arp_process_subcmds arp_cmd)
1470{
1471	struct qeth_arp_cache_entry *cmd_entry;
1472	struct qeth_cmd_buffer *iob;
1473	int rc;
1474
1475	if (arp_cmd == IPA_CMD_ASS_ARP_ADD_ENTRY)
1476		QETH_CARD_TEXT(card, 3, "arpadd");
1477	else
1478		QETH_CARD_TEXT(card, 3, "arpdel");
1479
1480	/*
1481	 * currently GuestLAN only supports the ARP assist function
1482	 * IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_ADD_ENTRY;
1483	 * thus we say EOPNOTSUPP for this ARP function
1484	 */
1485	if (IS_VM_NIC(card))
1486		return -EOPNOTSUPP;
1487	if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
1488		return -EOPNOTSUPP;
1489	}
1490
1491	iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING, arp_cmd,
1492				       SETASS_DATA_SIZEOF(arp_entry),
1493				       QETH_PROT_IPV4);
1494	if (!iob)
1495		return -ENOMEM;
1496
1497	cmd_entry = &__ipa_cmd(iob)->data.setassparms.data.arp_entry;
1498	ether_addr_copy(cmd_entry->macaddr, entry->macaddr);
1499	memcpy(cmd_entry->ipaddr, entry->ipaddr, 4);
1500	rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_cmd_cb, NULL);
1501	if (rc)
1502		QETH_DBF_MESSAGE(2, "Could not modify (cmd: %#x) ARP entry on device %x: %#x\n",
1503				 arp_cmd, CARD_DEVID(card), rc);
1504	return rc;
1505}
1506
1507static int qeth_l3_arp_flush_cache(struct qeth_card *card)
1508{
1509	struct qeth_cmd_buffer *iob;
1510	int rc;
1511
1512	QETH_CARD_TEXT(card, 3, "arpflush");
1513
1514	/*
1515	 * currently GuestLAN only supports the ARP assist function
1516	 * IPA_CMD_ASS_ARP_QUERY_INFO, but not IPA_CMD_ASS_ARP_FLUSH_CACHE;
1517	 * thus we say EOPNOTSUPP for this ARP function
1518	*/
1519	if (IS_VM_NIC(card) || IS_IQD(card))
1520		return -EOPNOTSUPP;
1521	if (!qeth_is_supported(card, IPA_ARP_PROCESSING)) {
1522		return -EOPNOTSUPP;
1523	}
1524
1525	iob = qeth_get_setassparms_cmd(card, IPA_ARP_PROCESSING,
1526				       IPA_CMD_ASS_ARP_FLUSH_CACHE, 0,
1527				       QETH_PROT_IPV4);
1528	if (!iob)
1529		return -ENOMEM;
1530
1531	rc = qeth_send_ipa_cmd(card, iob, qeth_l3_arp_cmd_cb, NULL);
1532	if (rc)
1533		QETH_DBF_MESSAGE(2, "Could not flush ARP cache on device %x: %#x\n",
1534				 CARD_DEVID(card), rc);
1535	return rc;
1536}
1537
1538static int qeth_l3_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1539{
1540	struct qeth_card *card = dev->ml_priv;
1541	struct qeth_arp_cache_entry arp_entry;
1542	enum qeth_arp_process_subcmds arp_cmd;
1543	int rc = 0;
1544
1545	switch (cmd) {
1546	case SIOC_QETH_ARP_SET_NO_ENTRIES:
1547		if (!capable(CAP_NET_ADMIN)) {
1548			rc = -EPERM;
1549			break;
1550		}
1551		rc = qeth_l3_arp_set_no_entries(card, rq->ifr_ifru.ifru_ivalue);
1552		break;
1553	case SIOC_QETH_ARP_QUERY_INFO:
1554		if (!capable(CAP_NET_ADMIN)) {
1555			rc = -EPERM;
1556			break;
1557		}
1558		rc = qeth_l3_arp_query(card, rq->ifr_ifru.ifru_data);
1559		break;
1560	case SIOC_QETH_ARP_ADD_ENTRY:
1561	case SIOC_QETH_ARP_REMOVE_ENTRY:
1562		if (!capable(CAP_NET_ADMIN))
1563			return -EPERM;
1564		if (copy_from_user(&arp_entry, rq->ifr_data, sizeof(arp_entry)))
1565			return -EFAULT;
1566
1567		arp_cmd = (cmd == SIOC_QETH_ARP_ADD_ENTRY) ?
1568				IPA_CMD_ASS_ARP_ADD_ENTRY :
1569				IPA_CMD_ASS_ARP_REMOVE_ENTRY;
1570		return qeth_l3_arp_modify_entry(card, &arp_entry, arp_cmd);
1571	case SIOC_QETH_ARP_FLUSH_CACHE:
1572		if (!capable(CAP_NET_ADMIN)) {
1573			rc = -EPERM;
1574			break;
1575		}
1576		rc = qeth_l3_arp_flush_cache(card);
1577		break;
1578	default:
1579		rc = -EOPNOTSUPP;
1580	}
1581	return rc;
1582}
1583
1584static int qeth_l3_get_cast_type_rcu(struct sk_buff *skb, struct dst_entry *dst,
1585				     int ipv)
1586{
1587	struct neighbour *n = NULL;
1588
1589	if (dst)
1590		n = dst_neigh_lookup_skb(dst, skb);
1591
1592	if (n) {
1593		int cast_type = n->type;
1594
1595		neigh_release(n);
1596		if ((cast_type == RTN_BROADCAST) ||
1597		    (cast_type == RTN_MULTICAST) ||
1598		    (cast_type == RTN_ANYCAST))
1599			return cast_type;
1600		return RTN_UNICAST;
1601	}
1602
1603	/* no neighbour (eg AF_PACKET), fall back to target's IP address ... */
1604	switch (ipv) {
1605	case 4:
1606		if (ipv4_is_lbcast(ip_hdr(skb)->daddr))
1607			return RTN_BROADCAST;
1608		return ipv4_is_multicast(ip_hdr(skb)->daddr) ?
1609				RTN_MULTICAST : RTN_UNICAST;
1610	case 6:
1611		return ipv6_addr_is_multicast(&ipv6_hdr(skb)->daddr) ?
1612				RTN_MULTICAST : RTN_UNICAST;
1613	default:
1614		/* ... and MAC address */
1615		return qeth_get_ether_cast_type(skb);
1616	}
1617}
1618
1619static int qeth_l3_get_cast_type(struct sk_buff *skb)
1620{
1621	int ipv = qeth_get_ip_version(skb);
1622	struct dst_entry *dst;
1623	int cast_type;
1624
1625	rcu_read_lock();
1626	dst = qeth_dst_check_rcu(skb, ipv);
1627	cast_type = qeth_l3_get_cast_type_rcu(skb, dst, ipv);
1628	rcu_read_unlock();
1629
1630	return cast_type;
1631}
1632
1633static u8 qeth_l3_cast_type_to_flag(int cast_type)
1634{
1635	if (cast_type == RTN_MULTICAST)
1636		return QETH_CAST_MULTICAST;
1637	if (cast_type == RTN_ANYCAST)
1638		return QETH_CAST_ANYCAST;
1639	if (cast_type == RTN_BROADCAST)
1640		return QETH_CAST_BROADCAST;
1641	return QETH_CAST_UNICAST;
1642}
1643
1644static void qeth_l3_fill_header(struct qeth_qdio_out_q *queue,
1645				struct qeth_hdr *hdr, struct sk_buff *skb,
1646				int ipv, unsigned int data_len)
1647{
1648	struct qeth_hdr_layer3 *l3_hdr = &hdr->hdr.l3;
1649	struct vlan_ethhdr *veth = vlan_eth_hdr(skb);
1650	struct qeth_card *card = queue->card;
1651	struct dst_entry *dst;
1652	int cast_type;
1653
1654	hdr->hdr.l3.length = data_len;
1655
1656	if (skb_is_gso(skb)) {
1657		hdr->hdr.l3.id = QETH_HEADER_TYPE_L3_TSO;
1658	} else {
1659		hdr->hdr.l3.id = QETH_HEADER_TYPE_LAYER3;
1660
1661		if (skb->protocol == htons(ETH_P_AF_IUCV)) {
1662			l3_hdr->flags = QETH_HDR_IPV6 | QETH_CAST_UNICAST;
1663			l3_hdr->next_hop.addr.s6_addr16[0] = htons(0xfe80);
1664			memcpy(&l3_hdr->next_hop.addr.s6_addr32[2],
1665			       iucv_trans_hdr(skb)->destUserID, 8);
1666			return;
1667		}
1668
1669		if (skb->ip_summed == CHECKSUM_PARTIAL) {
1670			qeth_tx_csum(skb, &hdr->hdr.l3.ext_flags, ipv);
1671			/* some HW requires combined L3+L4 csum offload: */
1672			if (ipv == 4)
1673				hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_CSUM_HDR_REQ;
1674		}
1675	}
1676
1677	if (ipv == 4 || IS_IQD(card)) {
1678		/* NETIF_F_HW_VLAN_CTAG_TX */
1679		if (skb_vlan_tag_present(skb)) {
1680			hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_VLAN_FRAME;
1681			hdr->hdr.l3.vlan_id = skb_vlan_tag_get(skb);
1682		}
1683	} else if (veth->h_vlan_proto == htons(ETH_P_8021Q)) {
1684		hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_INCLUDE_VLAN_TAG;
1685		hdr->hdr.l3.vlan_id = ntohs(veth->h_vlan_TCI);
1686	}
1687
1688	rcu_read_lock();
1689	dst = qeth_dst_check_rcu(skb, ipv);
1690
1691	if (IS_IQD(card) && skb_get_queue_mapping(skb) != QETH_IQD_MCAST_TXQ)
1692		cast_type = RTN_UNICAST;
1693	else
1694		cast_type = qeth_l3_get_cast_type_rcu(skb, dst, ipv);
1695	l3_hdr->flags |= qeth_l3_cast_type_to_flag(cast_type);
1696
1697	if (ipv == 4) {
1698		l3_hdr->next_hop.addr.s6_addr32[3] =
1699					qeth_next_hop_v4_rcu(skb, dst);
1700	} else if (ipv == 6) {
1701		l3_hdr->next_hop.addr = *qeth_next_hop_v6_rcu(skb, dst);
1702
1703		hdr->hdr.l3.flags |= QETH_HDR_IPV6;
1704		if (!IS_IQD(card))
1705			hdr->hdr.l3.flags |= QETH_HDR_PASSTHRU;
1706	} else {
1707		/* OSA only: */
1708		l3_hdr->flags |= QETH_HDR_PASSTHRU;
1709	}
1710	rcu_read_unlock();
1711}
1712
1713static void qeth_l3_fixup_headers(struct sk_buff *skb)
1714{
1715	struct iphdr *iph = ip_hdr(skb);
1716
1717	/* this is safe, IPv6 traffic takes a different path */
1718	if (skb->ip_summed == CHECKSUM_PARTIAL)
1719		iph->check = 0;
1720	if (skb_is_gso(skb)) {
1721		iph->tot_len = 0;
1722		tcp_hdr(skb)->check = ~tcp_v4_check(0, iph->saddr,
1723						    iph->daddr, 0);
1724	}
1725}
1726
1727static int qeth_l3_xmit(struct qeth_card *card, struct sk_buff *skb,
1728			struct qeth_qdio_out_q *queue, int ipv)
1729{
1730	unsigned int hw_hdr_len;
1731	int rc;
1732
1733	/* re-use the L2 header area for the HW header: */
1734	hw_hdr_len = skb_is_gso(skb) ? sizeof(struct qeth_hdr_tso) :
1735				       sizeof(struct qeth_hdr);
1736	rc = skb_cow_head(skb, hw_hdr_len - ETH_HLEN);
1737	if (rc)
1738		return rc;
1739	skb_pull(skb, ETH_HLEN);
1740
1741	qeth_l3_fixup_headers(skb);
1742	return qeth_xmit(card, skb, queue, ipv, qeth_l3_fill_header);
1743}
1744
1745static netdev_tx_t qeth_l3_hard_start_xmit(struct sk_buff *skb,
1746					   struct net_device *dev)
1747{
1748	struct qeth_card *card = dev->ml_priv;
1749	u16 txq = skb_get_queue_mapping(skb);
1750	int ipv = qeth_get_ip_version(skb);
1751	struct qeth_qdio_out_q *queue;
1752	int rc;
1753
1754	if (!skb_is_gso(skb))
1755		qdisc_skb_cb(skb)->pkt_len = skb->len;
1756	if (IS_IQD(card)) {
1757		queue = card->qdio.out_qs[qeth_iqd_translate_txq(dev, txq)];
1758
1759		if (card->options.sniffer)
1760			goto tx_drop;
1761		if ((card->options.cq != QETH_CQ_ENABLED && !ipv) ||
1762		    (card->options.cq == QETH_CQ_ENABLED &&
1763		     skb->protocol != htons(ETH_P_AF_IUCV)))
1764			goto tx_drop;
1765	} else {
1766		queue = card->qdio.out_qs[txq];
1767	}
1768
1769	if (!(dev->flags & IFF_BROADCAST) &&
1770	    qeth_l3_get_cast_type(skb) == RTN_BROADCAST)
1771		goto tx_drop;
1772
1773	if (ipv == 4 || IS_IQD(card))
1774		rc = qeth_l3_xmit(card, skb, queue, ipv);
1775	else
1776		rc = qeth_xmit(card, skb, queue, ipv, qeth_l3_fill_header);
1777
1778	if (!rc)
1779		return NETDEV_TX_OK;
1780
1781tx_drop:
1782	QETH_TXQ_STAT_INC(queue, tx_dropped);
1783	kfree_skb(skb);
1784	return NETDEV_TX_OK;
1785}
1786
1787static void qeth_l3_set_rx_mode(struct net_device *dev)
1788{
1789	struct qeth_card *card = dev->ml_priv;
1790
1791	schedule_work(&card->rx_mode_work);
1792}
1793
1794/*
1795 * we need NOARP for IPv4 but we want neighbor solicitation for IPv6. Setting
1796 * NOARP on the netdevice is no option because it also turns off neighbor
1797 * solicitation. For IPv4 we install a neighbor_setup function. We don't want
1798 * arp resolution but we want the hard header (packet socket will work
1799 * e.g. tcpdump)
1800 */
1801static int qeth_l3_neigh_setup_noarp(struct neighbour *n)
1802{
1803	n->nud_state = NUD_NOARP;
1804	memcpy(n->ha, "FAKELL", 6);
1805	n->output = n->ops->connected_output;
1806	return 0;
1807}
1808
1809static int
1810qeth_l3_neigh_setup(struct net_device *dev, struct neigh_parms *np)
1811{
1812	if (np->tbl->family == AF_INET)
1813		np->neigh_setup = qeth_l3_neigh_setup_noarp;
1814
1815	return 0;
1816}
1817
1818static netdev_features_t qeth_l3_osa_features_check(struct sk_buff *skb,
1819						    struct net_device *dev,
1820						    netdev_features_t features)
1821{
1822	if (vlan_get_protocol(skb) != htons(ETH_P_IP))
1823		features &= ~NETIF_F_HW_VLAN_CTAG_TX;
1824	return qeth_features_check(skb, dev, features);
1825}
1826
1827static u16 qeth_l3_iqd_select_queue(struct net_device *dev, struct sk_buff *skb,
1828				    struct net_device *sb_dev)
1829{
1830	return qeth_iqd_select_queue(dev, skb, qeth_l3_get_cast_type(skb),
1831				     sb_dev);
1832}
1833
1834static u16 qeth_l3_osa_select_queue(struct net_device *dev, struct sk_buff *skb,
1835				    struct net_device *sb_dev)
1836{
1837	struct qeth_card *card = dev->ml_priv;
1838
1839	if (qeth_uses_tx_prio_queueing(card))
1840		return qeth_get_priority_queue(card, skb);
1841
1842	return netdev_pick_tx(dev, skb, sb_dev);
1843}
1844
1845static const struct net_device_ops qeth_l3_netdev_ops = {
1846	.ndo_open		= qeth_open,
1847	.ndo_stop		= qeth_stop,
1848	.ndo_get_stats64	= qeth_get_stats64,
1849	.ndo_start_xmit		= qeth_l3_hard_start_xmit,
1850	.ndo_select_queue	= qeth_l3_iqd_select_queue,
1851	.ndo_validate_addr	= eth_validate_addr,
1852	.ndo_set_rx_mode	= qeth_l3_set_rx_mode,
1853	.ndo_do_ioctl		= qeth_do_ioctl,
1854	.ndo_fix_features	= qeth_fix_features,
1855	.ndo_set_features	= qeth_set_features,
1856	.ndo_vlan_rx_add_vid	= qeth_l3_vlan_rx_add_vid,
1857	.ndo_vlan_rx_kill_vid   = qeth_l3_vlan_rx_kill_vid,
1858	.ndo_tx_timeout		= qeth_tx_timeout,
1859};
1860
1861static const struct net_device_ops qeth_l3_osa_netdev_ops = {
1862	.ndo_open		= qeth_open,
1863	.ndo_stop		= qeth_stop,
1864	.ndo_get_stats64	= qeth_get_stats64,
1865	.ndo_start_xmit		= qeth_l3_hard_start_xmit,
1866	.ndo_features_check	= qeth_l3_osa_features_check,
1867	.ndo_select_queue	= qeth_l3_osa_select_queue,
1868	.ndo_validate_addr	= eth_validate_addr,
1869	.ndo_set_rx_mode	= qeth_l3_set_rx_mode,
1870	.ndo_do_ioctl		= qeth_do_ioctl,
1871	.ndo_fix_features	= qeth_fix_features,
1872	.ndo_set_features	= qeth_set_features,
1873	.ndo_vlan_rx_add_vid	= qeth_l3_vlan_rx_add_vid,
1874	.ndo_vlan_rx_kill_vid   = qeth_l3_vlan_rx_kill_vid,
1875	.ndo_tx_timeout		= qeth_tx_timeout,
1876	.ndo_neigh_setup	= qeth_l3_neigh_setup,
1877};
1878
1879static int qeth_l3_setup_netdev(struct qeth_card *card)
1880{
1881	struct net_device *dev = card->dev;
1882	unsigned int headroom;
1883	int rc;
1884
1885	if (IS_OSD(card) || IS_OSX(card)) {
1886		card->dev->netdev_ops = &qeth_l3_osa_netdev_ops;
1887
1888		/*IPv6 address autoconfiguration stuff*/
1889		dev->dev_id = qeth_l3_get_unique_id(card, dev->dev_id);
1890
1891		if (!IS_VM_NIC(card)) {
1892			card->dev->features |= NETIF_F_SG;
1893			card->dev->hw_features |= NETIF_F_TSO |
1894				NETIF_F_RXCSUM | NETIF_F_IP_CSUM;
1895			card->dev->vlan_features |= NETIF_F_TSO |
1896				NETIF_F_RXCSUM | NETIF_F_IP_CSUM;
1897		}
1898
1899		if (qeth_is_supported6(card, IPA_OUTBOUND_CHECKSUM_V6)) {
1900			card->dev->hw_features |= NETIF_F_IPV6_CSUM;
1901			card->dev->vlan_features |= NETIF_F_IPV6_CSUM;
1902		}
1903		if (qeth_is_supported6(card, IPA_OUTBOUND_TSO)) {
1904			card->dev->hw_features |= NETIF_F_TSO6;
1905			card->dev->vlan_features |= NETIF_F_TSO6;
1906		}
1907
1908		/* allow for de-acceleration of NETIF_F_HW_VLAN_CTAG_TX: */
1909		if (card->dev->hw_features & NETIF_F_TSO6)
1910			headroom = sizeof(struct qeth_hdr_tso) + VLAN_HLEN;
1911		else if (card->dev->hw_features & NETIF_F_TSO)
1912			headroom = sizeof(struct qeth_hdr_tso);
1913		else
1914			headroom = sizeof(struct qeth_hdr) + VLAN_HLEN;
1915	} else if (IS_IQD(card)) {
1916		card->dev->flags |= IFF_NOARP;
1917		card->dev->netdev_ops = &qeth_l3_netdev_ops;
1918		headroom = sizeof(struct qeth_hdr) - ETH_HLEN;
1919
1920		rc = qeth_l3_iqd_read_initial_mac(card);
1921		if (rc)
1922			return rc;
1923	} else
1924		return -ENODEV;
1925
1926	card->dev->needed_headroom = headroom;
1927	card->dev->features |=	NETIF_F_HW_VLAN_CTAG_TX |
1928				NETIF_F_HW_VLAN_CTAG_RX |
1929				NETIF_F_HW_VLAN_CTAG_FILTER;
1930
1931	netif_keep_dst(card->dev);
1932	if (card->dev->hw_features & (NETIF_F_TSO | NETIF_F_TSO6))
1933		netif_set_gso_max_size(card->dev,
1934				       PAGE_SIZE * (QETH_MAX_BUFFER_ELEMENTS(card) - 1));
1935
1936	netif_napi_add(card->dev, &card->napi, qeth_poll, QETH_NAPI_WEIGHT);
1937	return register_netdev(card->dev);
1938}
1939
1940static const struct device_type qeth_l3_devtype = {
1941	.name = "qeth_layer3",
1942	.groups = qeth_l3_attr_groups,
1943};
1944
1945static int qeth_l3_probe_device(struct ccwgroup_device *gdev)
1946{
1947	struct qeth_card *card = dev_get_drvdata(&gdev->dev);
1948	int rc;
1949
1950	hash_init(card->ip_htable);
1951	mutex_init(&card->ip_lock);
1952	card->cmd_wq = alloc_ordered_workqueue("%s_cmd", 0,
1953					       dev_name(&gdev->dev));
1954	if (!card->cmd_wq)
1955		return -ENOMEM;
1956
1957	if (gdev->dev.type == &qeth_generic_devtype) {
1958		rc = qeth_l3_create_device_attributes(&gdev->dev);
1959		if (rc) {
1960			destroy_workqueue(card->cmd_wq);
1961			return rc;
1962		}
1963	}
1964
1965	INIT_WORK(&card->rx_mode_work, qeth_l3_rx_mode_work);
1966	return 0;
1967}
1968
1969static void qeth_l3_remove_device(struct ccwgroup_device *cgdev)
1970{
1971	struct qeth_card *card = dev_get_drvdata(&cgdev->dev);
1972
1973	if (cgdev->dev.type == &qeth_generic_devtype)
1974		qeth_l3_remove_device_attributes(&cgdev->dev);
1975
1976	qeth_set_allowed_threads(card, 0, 1);
1977	wait_event(card->wait_q, qeth_threads_running(card, 0xffffffff) == 0);
1978
1979	if (cgdev->state == CCWGROUP_ONLINE)
1980		qeth_set_offline(card, card->discipline, false);
1981
1982	cancel_work_sync(&card->close_dev_work);
1983	if (card->dev->reg_state == NETREG_REGISTERED)
1984		unregister_netdev(card->dev);
1985
1986	flush_workqueue(card->cmd_wq);
1987	destroy_workqueue(card->cmd_wq);
1988	qeth_l3_clear_ip_htable(card, 0);
1989	qeth_l3_clear_ipato_list(card);
1990}
1991
1992static int qeth_l3_set_online(struct qeth_card *card, bool carrier_ok)
1993{
1994	struct net_device *dev = card->dev;
1995	int rc = 0;
1996
1997	/* softsetup */
1998	QETH_CARD_TEXT(card, 2, "softsetp");
1999
2000	rc = qeth_l3_setadapter_parms(card);
2001	if (rc)
2002		QETH_CARD_TEXT_(card, 2, "2err%04x", rc);
2003	if (!card->options.sniffer) {
2004		qeth_l3_start_ipassists(card);
2005
2006		rc = qeth_l3_setrouting_v4(card);
2007		if (rc)
2008			QETH_CARD_TEXT_(card, 2, "4err%04x", rc);
2009		rc = qeth_l3_setrouting_v6(card);
2010		if (rc)
2011			QETH_CARD_TEXT_(card, 2, "5err%04x", rc);
2012	}
2013
2014	card->state = CARD_STATE_SOFTSETUP;
2015
2016	qeth_set_allowed_threads(card, 0xffffffff, 0);
2017	qeth_l3_recover_ip(card);
2018
2019	if (dev->reg_state != NETREG_REGISTERED) {
2020		rc = qeth_l3_setup_netdev(card);
2021		if (rc)
2022			goto err_setup;
2023
2024		if (carrier_ok)
2025			netif_carrier_on(dev);
2026	} else {
2027		rtnl_lock();
2028		rc = qeth_set_real_num_tx_queues(card,
2029						 qeth_tx_actual_queues(card));
2030		if (rc) {
2031			rtnl_unlock();
2032			goto err_set_queues;
2033		}
2034
2035		if (carrier_ok)
2036			netif_carrier_on(dev);
2037		else
2038			netif_carrier_off(dev);
2039
2040		netif_device_attach(dev);
2041		qeth_enable_hw_features(dev);
2042
2043		if (netif_running(dev)) {
2044			local_bh_disable();
2045			napi_schedule(&card->napi);
2046			/* kick-start the NAPI softirq: */
2047			local_bh_enable();
2048		}
2049		rtnl_unlock();
2050	}
2051	return 0;
2052
2053err_set_queues:
2054err_setup:
2055	qeth_set_allowed_threads(card, 0, 1);
2056	card->state = CARD_STATE_DOWN;
2057	qeth_l3_clear_ip_htable(card, 1);
2058	return rc;
2059}
2060
2061static void qeth_l3_set_offline(struct qeth_card *card)
2062{
2063	qeth_set_allowed_threads(card, 0, 1);
2064	qeth_l3_drain_rx_mode_cache(card);
2065
2066	if (card->options.sniffer &&
2067	    (card->info.promisc_mode == SET_PROMISC_MODE_ON))
2068		qeth_diags_trace(card, QETH_DIAGS_CMD_TRACE_DISABLE);
2069
2070	if (card->state == CARD_STATE_SOFTSETUP) {
2071		card->state = CARD_STATE_DOWN;
2072		qeth_l3_clear_ip_htable(card, 1);
2073	}
2074}
2075
2076/* Returns zero if the command is successfully "consumed" */
2077static int qeth_l3_control_event(struct qeth_card *card,
2078					struct qeth_ipa_cmd *cmd)
2079{
2080	return 1;
2081}
2082
2083const struct qeth_discipline qeth_l3_discipline = {
2084	.devtype = &qeth_l3_devtype,
2085	.setup = qeth_l3_probe_device,
2086	.remove = qeth_l3_remove_device,
2087	.set_online = qeth_l3_set_online,
2088	.set_offline = qeth_l3_set_offline,
2089	.do_ioctl = qeth_l3_do_ioctl,
2090	.control_event_handler = qeth_l3_control_event,
2091};
2092EXPORT_SYMBOL_GPL(qeth_l3_discipline);
2093
2094static int qeth_l3_handle_ip_event(struct qeth_card *card,
2095				   struct qeth_ipaddr *addr,
2096				   unsigned long event)
2097{
2098	switch (event) {
2099	case NETDEV_UP:
2100		qeth_l3_modify_ip(card, addr, true);
2101		return NOTIFY_OK;
2102	case NETDEV_DOWN:
2103		qeth_l3_modify_ip(card, addr, false);
2104		return NOTIFY_OK;
2105	default:
2106		return NOTIFY_DONE;
2107	}
2108}
2109
2110struct qeth_l3_ip_event_work {
2111	struct work_struct work;
2112	struct qeth_card *card;
2113	struct qeth_ipaddr addr;
2114};
2115
2116#define to_ip_work(w) container_of((w), struct qeth_l3_ip_event_work, work)
2117
2118static void qeth_l3_add_ip_worker(struct work_struct *work)
2119{
2120	struct qeth_l3_ip_event_work *ip_work = to_ip_work(work);
2121
2122	qeth_l3_modify_ip(ip_work->card, &ip_work->addr, true);
2123	kfree(work);
2124}
2125
2126static void qeth_l3_delete_ip_worker(struct work_struct *work)
2127{
2128	struct qeth_l3_ip_event_work *ip_work = to_ip_work(work);
2129
2130	qeth_l3_modify_ip(ip_work->card, &ip_work->addr, false);
2131	kfree(work);
2132}
2133
2134static struct qeth_card *qeth_l3_get_card_from_dev(struct net_device *dev)
2135{
2136	if (is_vlan_dev(dev))
2137		dev = vlan_dev_real_dev(dev);
2138	if (dev->netdev_ops == &qeth_l3_osa_netdev_ops ||
2139	    dev->netdev_ops == &qeth_l3_netdev_ops)
2140		return (struct qeth_card *) dev->ml_priv;
2141	return NULL;
2142}
2143
2144static int qeth_l3_ip_event(struct notifier_block *this,
2145			    unsigned long event, void *ptr)
2146{
2147	struct in_ifaddr *ifa = (struct in_ifaddr *)ptr;
2148	struct net_device *dev = ifa->ifa_dev->dev;
2149	struct qeth_ipaddr addr;
2150	struct qeth_card *card;
2151
2152	card = qeth_l3_get_card_from_dev(dev);
2153	if (!card)
2154		return NOTIFY_DONE;
2155	QETH_CARD_TEXT(card, 3, "ipevent");
2156
2157	qeth_l3_init_ipaddr(&addr, QETH_IP_TYPE_NORMAL, QETH_PROT_IPV4);
2158	addr.u.a4.addr = ifa->ifa_address;
2159	addr.u.a4.mask = ifa->ifa_mask;
2160
2161	return qeth_l3_handle_ip_event(card, &addr, event);
2162}
2163
2164static struct notifier_block qeth_l3_ip_notifier = {
2165	qeth_l3_ip_event,
2166	NULL,
2167};
2168
2169static int qeth_l3_ip6_event(struct notifier_block *this,
2170			     unsigned long event, void *ptr)
2171{
2172	struct inet6_ifaddr *ifa = (struct inet6_ifaddr *)ptr;
2173	struct net_device *dev = ifa->idev->dev;
2174	struct qeth_l3_ip_event_work *ip_work;
2175	struct qeth_card *card;
2176
2177	if (event != NETDEV_UP && event != NETDEV_DOWN)
2178		return NOTIFY_DONE;
2179
2180	card = qeth_l3_get_card_from_dev(dev);
2181	if (!card)
2182		return NOTIFY_DONE;
2183	QETH_CARD_TEXT(card, 3, "ip6event");
2184	if (!qeth_is_supported(card, IPA_IPV6))
2185		return NOTIFY_DONE;
2186
2187	ip_work = kmalloc(sizeof(*ip_work), GFP_ATOMIC);
2188	if (!ip_work)
2189		return NOTIFY_DONE;
2190
2191	if (event == NETDEV_UP)
2192		INIT_WORK(&ip_work->work, qeth_l3_add_ip_worker);
2193	else
2194		INIT_WORK(&ip_work->work, qeth_l3_delete_ip_worker);
2195
2196	ip_work->card = card;
2197	qeth_l3_init_ipaddr(&ip_work->addr, QETH_IP_TYPE_NORMAL,
2198			    QETH_PROT_IPV6);
2199	ip_work->addr.u.a6.addr = ifa->addr;
2200	ip_work->addr.u.a6.pfxlen = ifa->prefix_len;
2201
2202	queue_work(card->cmd_wq, &ip_work->work);
2203	return NOTIFY_OK;
2204}
2205
2206static struct notifier_block qeth_l3_ip6_notifier = {
2207	qeth_l3_ip6_event,
2208	NULL,
2209};
2210
2211static int qeth_l3_register_notifiers(void)
2212{
2213	int rc;
2214
2215	QETH_DBF_TEXT(SETUP, 5, "regnotif");
2216	rc = register_inetaddr_notifier(&qeth_l3_ip_notifier);
2217	if (rc)
2218		return rc;
2219	rc = register_inet6addr_notifier(&qeth_l3_ip6_notifier);
2220	if (rc) {
2221		unregister_inetaddr_notifier(&qeth_l3_ip_notifier);
2222		return rc;
2223	}
2224	return 0;
2225}
2226
2227static void qeth_l3_unregister_notifiers(void)
2228{
2229	QETH_DBF_TEXT(SETUP, 5, "unregnot");
2230	WARN_ON(unregister_inetaddr_notifier(&qeth_l3_ip_notifier));
2231	WARN_ON(unregister_inet6addr_notifier(&qeth_l3_ip6_notifier));
2232}
2233
2234static int __init qeth_l3_init(void)
2235{
2236	pr_info("register layer 3 discipline\n");
2237	return qeth_l3_register_notifiers();
2238}
2239
2240static void __exit qeth_l3_exit(void)
2241{
2242	qeth_l3_unregister_notifiers();
2243	pr_info("unregister layer 3 discipline\n");
2244}
2245
2246module_init(qeth_l3_init);
2247module_exit(qeth_l3_exit);
2248MODULE_AUTHOR("Frank Blaschka <frank.blaschka@de.ibm.com>");
2249MODULE_DESCRIPTION("qeth layer 3 discipline");
2250MODULE_LICENSE("GPL");
2251