diff options
author | Dmitry Kozlov <xeb@mail.ru> | 2019-12-24 14:50:04 +0300 |
---|---|---|
committer | Dmitry Kozlov <xeb@mail.ru> | 2019-12-24 14:50:04 +0300 |
commit | 4d837cc3bd92493732f2c598560e9e83c82f9b9e (patch) | |
tree | 5484fbf0fc3dcedd82bd601a7a3f7458c25dc932 /drivers | |
parent | fe7c3a4b74b9f1ed57d22316069602acd4794265 (diff) | |
download | accel-ppp-4d837cc3bd92493732f2c598560e9e83c82f9b9e.tar.gz accel-ppp-4d837cc3bd92493732f2c598560e9e83c82f9b9e.zip |
ipoe,vlan_mon: add support for kernels 5.2+
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/ipoe/ipoe.c | 58 | ||||
-rw-r--r-- | drivers/vlan_mon/vlan_mon.c | 37 |
2 files changed, 74 insertions, 21 deletions
diff --git a/drivers/ipoe/ipoe.c b/drivers/ipoe/ipoe.c index f3acb3f..6ac6d77 100644 --- a/drivers/ipoe/ipoe.c +++ b/drivers/ipoe/ipoe.c @@ -174,6 +174,10 @@ static struct genl_multicast_group ipoe_nl_mcg; #define NETIF_F_HW_VLAN_FILTER NETIF_F_HW_VLAN_CTAG_FILTER #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) +#define nla_nest_start_noflag(skb, attr) nla_nest_start(skb, attr) +#endif + static inline int hash_addr(__be32 addr) { #ifdef __LITTLE_ENDIAN @@ -255,8 +259,13 @@ static int check_nat_required(struct sk_buff *skb, struct net_device *link) if (IS_ERR(rt)) return 0; +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) if (rt->rt_gateway || (rt->dst.dev != link && rt->dst.dev != skb->dev)) r = 1; +#else + if (rt->rt_gw4 || (rt->dst.dev != link && rt->dst.dev != skb->dev)) + r = 1; +#endif ip_rt_put(rt); @@ -616,7 +625,7 @@ static void ipoe_process_queue(struct work_struct *w) } if (report_skb) { - ns = nla_nest_start(report_skb, id++); + ns = nla_nest_start_noflag(report_skb, id++); if (!ns) goto nl_err; @@ -1729,7 +1738,7 @@ static int ipoe_nl_cmd_del_net(struct sk_buff *skb, struct genl_info *info) return 0; } -static struct nla_policy ipoe_nl_policy[IPOE_ATTR_MAX + 1] = { +static const struct nla_policy ipoe_nl_policy[IPOE_ATTR_MAX + 1] = { [IPOE_ATTR_NONE] = { .type = NLA_UNSPEC, }, [IPOE_ATTR_ADDR] = { .type = NLA_U32, }, [IPOE_ATTR_PEER_ADDR] = { .type = NLA_U32, }, @@ -1741,71 +1750,93 @@ static struct nla_policy ipoe_nl_policy[IPOE_ATTR_MAX + 1] = { [IPOE_ATTR_LINK_IFINDEX]= { .type = NLA_U32, }, }; -static struct genl_ops ipoe_nl_ops[] = { +static const struct genl_ops ipoe_nl_ops[] = { { .cmd = IPOE_CMD_NOOP, .doit = ipoe_nl_cmd_noop, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) .policy = ipoe_nl_policy, +#endif /* can be retrieved by unprivileged users */ }, { .cmd = IPOE_CMD_CREATE, .doit = ipoe_nl_cmd_create, - .policy = ipoe_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = ipoe_nl_policy, +#endif }, { .cmd = IPOE_CMD_DELETE, .doit = ipoe_nl_cmd_delete, - .policy = ipoe_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = ipoe_nl_policy, +#endif }, { .cmd = IPOE_CMD_MODIFY, .doit = ipoe_nl_cmd_modify, - .policy = ipoe_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = ipoe_nl_policy, +#endif }, { .cmd = IPOE_CMD_GET, .dumpit = ipoe_nl_cmd_dump_sessions, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) .policy = ipoe_nl_policy, +#endif }, { .cmd = IPOE_CMD_ADD_IF, .doit = ipoe_nl_cmd_add_interface, - .policy = ipoe_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = ipoe_nl_policy, +#endif }, { .cmd = IPOE_CMD_DEL_IF, .doit = ipoe_nl_cmd_del_interface, - .policy = ipoe_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = ipoe_nl_policy, +#endif }, { .cmd = IPOE_CMD_ADD_EXCLUDE, .doit = ipoe_nl_cmd_add_exclude, - .policy = ipoe_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = ipoe_nl_policy, +#endif }, { .cmd = IPOE_CMD_DEL_EXCLUDE, .doit = ipoe_nl_cmd_del_exclude, - .policy = ipoe_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = ipoe_nl_policy, +#endif }, { .cmd = IPOE_CMD_ADD_NET, .doit = ipoe_nl_cmd_add_net, - .policy = ipoe_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = ipoe_nl_policy, +#endif }, { .cmd = IPOE_CMD_DEL_NET, .doit = ipoe_nl_cmd_del_net, - .policy = ipoe_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = ipoe_nl_policy, +#endif }, }; @@ -1834,6 +1865,9 @@ static struct genl_family ipoe_nl_family = { .mcgrps = ipoe_nl_mcgs, .n_mcgrps = ARRAY_SIZE(ipoe_nl_mcgs), #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,2,0) + .policy = ipoe_nl_policy, +#endif }; static const struct net_device_ops ipoe_netdev_ops = { diff --git a/drivers/vlan_mon/vlan_mon.c b/drivers/vlan_mon/vlan_mon.c index b6476d4..271f2ff 100644 --- a/drivers/vlan_mon/vlan_mon.c +++ b/drivers/vlan_mon/vlan_mon.c @@ -43,6 +43,10 @@ #define vlan_tx_tag_present(skb) skb_vlan_tag_present(skb) #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) +#define nla_nest_start_noflag(skb, attr) nla_nest_start(skb, attr) +#endif + struct vlan_dev { unsigned int magic; int ifindex; @@ -198,13 +202,13 @@ static void vlan_do_notify(struct work_struct *w) #if LINUX_VERSION_CODE < KERNEL_VERSION(3,13,0) && RHEL_MAJOR < 7 header = genlmsg_put(report_skb, 0, vlan_mon_nl_mcg.id, &vlan_mon_nl_family, 0, VLAN_MON_NOTIFY); #else - header = genlmsg_put(report_skb, 0, vlan_mon_nl_family.mcgrp_offset, &vlan_mon_nl_family, 0, VLAN_MON_NOTIFY); + header = genlmsg_put(report_skb, 0, 0, &vlan_mon_nl_family, 0, VLAN_MON_NOTIFY); #endif } //pr_info("notify %i vlan %i\n", id, n->vid); - ns = nla_nest_start(report_skb, id++); + ns = nla_nest_start_noflag(report_skb, id++); if (!ns) goto nl_err; @@ -616,7 +620,7 @@ static int vlan_mon_nl_cmd_check_busy(struct sk_buff *skb, struct genl_info *inf return ret; } -static struct nla_policy vlan_mon_nl_policy[VLAN_MON_ATTR_MAX + 1] = { +static const struct nla_policy vlan_mon_nl_policy[VLAN_MON_ATTR_MAX + 1] = { [VLAN_MON_ATTR_NONE] = { .type = NLA_UNSPEC, }, [VLAN_MON_ATTR_VLAN_MASK] = { .type = NLA_BINARY, .len = 4096/8 }, [VLAN_MON_ATTR_PROTO] = { .type = NLA_U16, }, @@ -624,42 +628,54 @@ static struct nla_policy vlan_mon_nl_policy[VLAN_MON_ATTR_MAX + 1] = { [VLAN_MON_ATTR_VID] = { .type = NLA_U16, }, }; -static struct genl_ops vlan_mon_nl_ops[] = { +static const struct genl_ops vlan_mon_nl_ops[] = { { .cmd = VLAN_MON_CMD_NOOP, .doit = vlan_mon_nl_cmd_noop, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) .policy = vlan_mon_nl_policy, +#endif /* can be retrieved by unprivileged users */ }, { .cmd = VLAN_MON_CMD_ADD, .doit = vlan_mon_nl_cmd_add_vlan_mon, - .policy = vlan_mon_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = vlan_mon_nl_policy, +#endif }, { .cmd = VLAN_MON_CMD_ADD_VID, .doit = vlan_mon_nl_cmd_add_vlan_mon_vid, - .policy = vlan_mon_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = vlan_mon_nl_policy, +#endif }, { .cmd = VLAN_MON_CMD_DEL, .doit = vlan_mon_nl_cmd_del_vlan_mon, - .policy = vlan_mon_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = vlan_mon_nl_policy, +#endif }, { .cmd = VLAN_MON_CMD_CHECK_BUSY, .doit = vlan_mon_nl_cmd_check_busy, - .policy = vlan_mon_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = vlan_mon_nl_policy, +#endif }, { .cmd = VLAN_MON_CMD_DEL_VID, .doit = vlan_mon_nl_cmd_del_vlan_mon_vid, - .policy = vlan_mon_nl_policy, .flags = GENL_ADMIN_PERM, +#if LINUX_VERSION_CODE < KERNEL_VERSION(5,2,0) + .policy = vlan_mon_nl_policy, +#endif }, }; @@ -688,6 +704,9 @@ static struct genl_family vlan_mon_nl_family = { .mcgrps = vlan_mon_nl_mcgs, .n_mcgrps = ARRAY_SIZE(vlan_mon_nl_mcgs), #endif +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,2,0) + .policy = vlan_mon_nl_policy, +#endif }; static struct packet_type vlan_pt __read_mostly = { |