|
@@ -895,9 +895,26 @@ static ssize_t qeth_l3_dev_rxip_add4_show(struct device *dev,
|
|
|
static int qeth_l3_parse_rxipe(const char *buf, enum qeth_prot_versions proto,
|
|
|
u8 *addr)
|
|
|
{
|
|
|
+ __be32 ipv4_addr;
|
|
|
+ struct in6_addr ipv6_addr;
|
|
|
+
|
|
|
if (qeth_l3_string_to_ipaddr(buf, proto, addr)) {
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
+ if (proto == QETH_PROT_IPV4) {
|
|
|
+ memcpy(&ipv4_addr, addr, sizeof(ipv4_addr));
|
|
|
+ if (ipv4_is_multicast(ipv4_addr)) {
|
|
|
+ QETH_DBF_MESSAGE(2, "multicast rxip not supported.\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+ } else if (proto == QETH_PROT_IPV6) {
|
|
|
+ memcpy(&ipv6_addr, addr, sizeof(ipv6_addr));
|
|
|
+ if (ipv6_addr_is_multicast(&ipv6_addr)) {
|
|
|
+ QETH_DBF_MESSAGE(2, "multicast rxip not supported.\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|