forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
netfilter: nft_reject: introduce icmp code abstraction for inet and b…
…ridge This patch introduces the NFT_REJECT_ICMPX_UNREACH type which provides an abstraction to the ICMP and ICMPv6 codes that you can use from the inet and bridge tables, they are: * NFT_REJECT_ICMPX_NO_ROUTE: no route to host - network unreachable * NFT_REJECT_ICMPX_PORT_UNREACH: port unreachable * NFT_REJECT_ICMPX_HOST_UNREACH: host unreachable * NFT_REJECT_ICMPX_ADMIN_PROHIBITED: administratevely prohibited You can still use the specific codes when restricting the rule to match the corresponding layer 3 protocol. I decided to not overload the existing NFT_REJECT_ICMP_UNREACH to have different semantics depending on the table family and to allow the user to specify ICMP family specific codes if they restrict it to the corresponding family. Signed-off-by: Pablo Neira Ayuso <[email protected]>
- Loading branch information
Showing
7 changed files
with
241 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,6 +17,8 @@ | |
#include <linux/netfilter/nf_tables.h> | ||
#include <net/netfilter/nf_tables.h> | ||
#include <net/netfilter/nft_reject.h> | ||
#include <linux/icmp.h> | ||
#include <linux/icmpv6.h> | ||
|
||
const struct nla_policy nft_reject_policy[NFTA_REJECT_MAX + 1] = { | ||
[NFTA_REJECT_TYPE] = { .type = NLA_U32 }, | ||
|
@@ -70,5 +72,40 @@ int nft_reject_dump(struct sk_buff *skb, const struct nft_expr *expr) | |
} | ||
EXPORT_SYMBOL_GPL(nft_reject_dump); | ||
|
||
static u8 icmp_code_v4[NFT_REJECT_ICMPX_MAX] = { | ||
[NFT_REJECT_ICMPX_NO_ROUTE] = ICMP_NET_UNREACH, | ||
[NFT_REJECT_ICMPX_PORT_UNREACH] = ICMP_PORT_UNREACH, | ||
[NFT_REJECT_ICMPX_HOST_UNREACH] = ICMP_HOST_UNREACH, | ||
[NFT_REJECT_ICMPX_ADMIN_PROHIBITED] = ICMP_PKT_FILTERED, | ||
}; | ||
|
||
int nft_reject_icmp_code(u8 code) | ||
{ | ||
if (code > NFT_REJECT_ICMPX_MAX) | ||
return -EINVAL; | ||
|
||
return icmp_code_v4[code]; | ||
} | ||
|
||
EXPORT_SYMBOL_GPL(nft_reject_icmp_code); | ||
|
||
|
||
static u8 icmp_code_v6[NFT_REJECT_ICMPX_MAX] = { | ||
[NFT_REJECT_ICMPX_NO_ROUTE] = ICMPV6_NOROUTE, | ||
[NFT_REJECT_ICMPX_PORT_UNREACH] = ICMPV6_PORT_UNREACH, | ||
[NFT_REJECT_ICMPX_HOST_UNREACH] = ICMPV6_ADDR_UNREACH, | ||
[NFT_REJECT_ICMPX_ADMIN_PROHIBITED] = ICMPV6_ADM_PROHIBITED, | ||
}; | ||
|
||
int nft_reject_icmpv6_code(u8 code) | ||
{ | ||
if (code > NFT_REJECT_ICMPX_MAX) | ||
return -EINVAL; | ||
|
||
return icmp_code_v6[code]; | ||
} | ||
|
||
EXPORT_SYMBOL_GPL(nft_reject_icmpv6_code); | ||
|
||
MODULE_LICENSE("GPL"); | ||
MODULE_AUTHOR("Patrick McHardy <[email protected]>"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters