Branch data Line data Source code
1 : : // SPDX-License-Identifier: GPL-2.0-only 2 : : #include <linux/netlink.h> 3 : : #include <linux/rtnetlink.h> 4 : : #include <linux/types.h> 5 : : #include <net/net_namespace.h> 6 : : #include <net/netlink.h> 7 : : #include <linux/in6.h> 8 : : #include <net/ip.h> 9 : : 10 : 0 : int rtm_getroute_parse_ip_proto(struct nlattr *attr, u8 *ip_proto, u8 family, 11 : : struct netlink_ext_ack *extack) 12 : : { 13 : 0 : *ip_proto = nla_get_u8(attr); 14 : : 15 [ # # # # ]: 0 : switch (*ip_proto) { 16 : : case IPPROTO_TCP: 17 : : case IPPROTO_UDP: 18 : : return 0; 19 : : case IPPROTO_ICMP: 20 [ # # ]: 0 : if (family != AF_INET) 21 : : break; 22 : : return 0; 23 : : #if IS_ENABLED(CONFIG_IPV6) 24 : : case IPPROTO_ICMPV6: 25 [ # # ]: 0 : if (family != AF_INET6) 26 : : break; 27 : : return 0; 28 : : #endif 29 : : } 30 [ # # ]: 0 : NL_SET_ERR_MSG(extack, "Unsupported ip proto"); 31 : : return -EOPNOTSUPP; 32 : : } 33 : : EXPORT_SYMBOL_GPL(rtm_getroute_parse_ip_proto);