cregit-Linux how code gets into the kernel

Release 4.15 net/netfilter/xt_DSCP.c

Directory: net/netfilter
/* x_tables module for setting the IPv4/IPv6 DSCP field, Version 1.8
 *
 * (C) 2002 by Harald Welte <laforge@netfilter.org>
 * based on ipt_FTOS.c (C) 2000 by Matthew G. Marsh <mgm@paktronix.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 * See RFC2474 for a description of the DSCP field within the IP Header.
*/

#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/ip.h>
#include <linux/ipv6.h>
#include <net/dsfield.h>

#include <linux/netfilter/x_tables.h>
#include <linux/netfilter/xt_DSCP.h>

MODULE_AUTHOR("Harald Welte <laforge@netfilter.org>");
MODULE_DESCRIPTION("Xtables: DSCP/TOS field modification");
MODULE_LICENSE("GPL");
MODULE_ALIAS("ipt_DSCP");
MODULE_ALIAS("ip6t_DSCP");
MODULE_ALIAS("ipt_TOS");
MODULE_ALIAS("ip6t_TOS");


static unsigned int dscp_tg(struct sk_buff *skb, const struct xt_action_param *par) { const struct xt_DSCP_info *dinfo = par->targinfo; u_int8_t dscp = ipv4_get_dsfield(ip_hdr(skb)) >> XT_DSCP_SHIFT; if (dscp != dinfo->dscp) { if (!skb_make_writable(skb, sizeof(struct iphdr))) return NF_DROP; ipv4_change_dsfield(ip_hdr(skb), (__force __u8)(~XT_DSCP_MASK), dinfo->dscp << XT_DSCP_SHIFT); } return XT_CONTINUE; }

Contributors

PersonTokensPropCommitsCommitProp
Harald Welte3941.49%220.00%
Yasuyuki Kozakai3335.11%110.00%
Rusty Russell66.38%110.00%
Arnaldo Carvalho de Melo66.38%110.00%
Jan Engelhardt55.32%330.00%
Herbert Xu44.26%110.00%
Florian Westphal11.06%110.00%
Total94100.00%10100.00%


static unsigned int dscp_tg6(struct sk_buff *skb, const struct xt_action_param *par) { const struct xt_DSCP_info *dinfo = par->targinfo; u_int8_t dscp = ipv6_get_dsfield(ipv6_hdr(skb)) >> XT_DSCP_SHIFT; if (dscp != dinfo->dscp) { if (!skb_make_writable(skb, sizeof(struct ipv6hdr))) return NF_DROP; ipv6_change_dsfield(ipv6_hdr(skb), (__force __u8)(~XT_DSCP_MASK), dinfo->dscp << XT_DSCP_SHIFT); } return XT_CONTINUE; }

Contributors

PersonTokensPropCommitsCommitProp
Yasuyuki Kozakai6367.02%112.50%
Harald Welte1515.96%112.50%
Arnaldo Carvalho de Melo66.38%112.50%
Jan Engelhardt55.32%337.50%
Herbert Xu44.26%112.50%
Florian Westphal11.06%112.50%
Total94100.00%8100.00%


static int dscp_tg_check(const struct xt_tgchk_param *par) { const struct xt_DSCP_info *info = par->targinfo; if (info->dscp > XT_DSCP_MAX) { pr_info("dscp %x out of range\n", info->dscp); return -EDOM; } return 0; }

Contributors

PersonTokensPropCommitsCommitProp
Harald Welte2552.08%111.11%
Jan Engelhardt1939.58%666.67%
Patrick McHardy24.17%111.11%
Yasuyuki Kozakai24.17%111.11%
Total48100.00%9100.00%


static unsigned int tos_tg(struct sk_buff *skb, const struct xt_action_param *par) { const struct xt_tos_target_info *info = par->targinfo; struct iphdr *iph = ip_hdr(skb); u_int8_t orig, nv; orig = ipv4_get_dsfield(iph); nv = (orig & ~info->tos_mask) ^ info->tos_value; if (orig != nv) { if (!skb_make_writable(skb, sizeof(struct iphdr))) return NF_DROP; iph = ip_hdr(skb); ipv4_change_dsfield(iph, 0, nv); } return XT_CONTINUE; }

Contributors

PersonTokensPropCommitsCommitProp
Jan Engelhardt109100.00%5100.00%
Total109100.00%5100.00%


static unsigned int tos_tg6(struct sk_buff *skb, const struct xt_action_param *par) { const struct xt_tos_target_info *info = par->targinfo; struct ipv6hdr *iph = ipv6_hdr(skb); u_int8_t orig, nv; orig = ipv6_get_dsfield(iph); nv = (orig & ~info->tos_mask) ^ info->tos_value; if (orig != nv) { if (!skb_make_writable(skb, sizeof(struct iphdr))) return NF_DROP; iph = ipv6_hdr(skb); ipv6_change_dsfield(iph, 0, nv); } return XT_CONTINUE; }

Contributors

PersonTokensPropCommitsCommitProp
Jan Engelhardt10899.08%375.00%
Fernando Luis Vázquez Cao10.92%125.00%
Total109100.00%4100.00%

static struct xt_target dscp_tg_reg[] __read_mostly = { { .name = "DSCP", .family = NFPROTO_IPV4, .checkentry = dscp_tg_check, .target = dscp_tg, .targetsize = sizeof(struct xt_DSCP_info), .table = "mangle", .me = THIS_MODULE, }, { .name = "DSCP", .family = NFPROTO_IPV6, .checkentry = dscp_tg_check, .target = dscp_tg6, .targetsize = sizeof(struct xt_DSCP_info), .table = "mangle", .me = THIS_MODULE, }, { .name = "TOS", .revision = 1, .family = NFPROTO_IPV4, .table = "mangle", .target = tos_tg, .targetsize = sizeof(struct xt_tos_target_info), .me = THIS_MODULE, }, { .name = "TOS", .revision = 1, .family = NFPROTO_IPV6, .table = "mangle", .target = tos_tg6, .targetsize = sizeof(struct xt_tos_target_info), .me = THIS_MODULE, }, };
static int __init dscp_tg_init(void) { return xt_register_targets(dscp_tg_reg, ARRAY_SIZE(dscp_tg_reg)); }

Contributors

PersonTokensPropCommitsCommitProp
Harald Welte1155.00%120.00%
Patrick McHardy420.00%120.00%
Jan Engelhardt315.00%120.00%
Daniele Bellucci15.00%120.00%
Yasuyuki Kozakai15.00%120.00%
Total20100.00%5100.00%


static void __exit dscp_tg_exit(void) { xt_unregister_targets(dscp_tg_reg, ARRAY_SIZE(dscp_tg_reg)); }

Contributors

PersonTokensPropCommitsCommitProp
Harald Welte1157.89%125.00%
Patrick McHardy421.05%125.00%
Jan Engelhardt315.79%125.00%
Yasuyuki Kozakai15.26%125.00%
Total19100.00%4100.00%

module_init(dscp_tg_init); module_exit(dscp_tg_exit);

Overall Contributors

PersonTokensPropCommitsCommitProp
Jan Engelhardt36148.78%1343.33%
Harald Welte14820.00%310.00%
Yasuyuki Kozakai14419.46%13.33%
Patrick McHardy456.08%516.67%
Art Haas121.62%13.33%
Arnaldo Carvalho de Melo121.62%26.67%
Herbert Xu81.08%13.33%
Rusty Russell60.81%13.33%
Florian Westphal20.27%13.33%
Fernando Luis Vázquez Cao10.14%13.33%
Daniele Bellucci10.14%13.33%
Total740100.00%30100.00%
Directory: net/netfilter
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.