Skip to content

Commit cc2d586

Browse files
TaeheeYooummakynes
authored andcommitted
netfilter: nf_nat_snmp_basic: use asn1 decoder library
The basic SNMP ALG parse snmp ASN.1 payload however, since 2012 linux kernel provide ASN.1 decoder library. If we use ASN.1 decoder in the /lib/asn1_decoder.c, we can remove about 1000 line of ASN.1 parsing routine. To use asn1_decoder.c, we should write mib file(nf_nat_snmp_basic.asn1) then /script/asn1_compiler.c makes *-asn1.c and *-asn1.h file at the compiletime.(nf_nat_snmp_basic-asn1.c, nf_nat_snmp_basic-asn1.h) The nf_nat_snmp_basic.asn1 is made by RFC1155, RFC1157, RFC1902, RFC1905, RFC2578, RFC3416. of course that mib file supports only the basic SNMP ALG. Previous SNMP ALG mangles only first octet of IPv4 address. but after this patch, the SNMP ALG mangles whole IPv4 Address. And SNMPv3 is not supported. I tested with snmp commands such ans snmpd, snmpwalk, snmptrap. Signed-off-by: Taehee Yoo <[email protected]> Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent bea588b commit cc2d586

File tree

5 files changed

+419
-1192
lines changed

5 files changed

+419
-1192
lines changed

net/ipv4/netfilter/Kconfig

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,7 @@ config NF_NAT_SNMP_BASIC
158158
depends on NF_CONNTRACK_SNMP
159159
depends on NETFILTER_ADVANCED
160160
default NF_NAT && NF_CONNTRACK_SNMP
161+
select ASN1
161162
---help---
162163

163164
This module implements an Application Layer Gateway (ALG) for

net/ipv4/netfilter/Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,15 @@ obj-$(CONFIG_NF_REJECT_IPV4) += nf_reject_ipv4.o
2727
# NAT helpers (nf_conntrack)
2828
obj-$(CONFIG_NF_NAT_H323) += nf_nat_h323.o
2929
obj-$(CONFIG_NF_NAT_PPTP) += nf_nat_pptp.o
30+
31+
nf_nat_snmp_basic-y := nf_nat_snmp_basic-asn1.o nf_nat_snmp_basic_main.o
32+
nf_nat_snmp_basic-y : nf_nat_snmp_basic-asn1.h nf_nat_snmp_basic-asn1.c
3033
obj-$(CONFIG_NF_NAT_SNMP_BASIC) += nf_nat_snmp_basic.o
34+
clean-files := nf_nat_snmp_basic-asn1.c nf_nat_snmp_basic-asn1.h
35+
3136
obj-$(CONFIG_NF_NAT_MASQUERADE_IPV4) += nf_nat_masquerade_ipv4.o
3237

38+
3339
# NAT protocols (nf_nat)
3440
obj-$(CONFIG_NF_NAT_PROTO_GRE) += nf_nat_proto_gre.o
3541

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
1+
Message ::=
2+
SEQUENCE {
3+
version
4+
INTEGER ({snmp_version}),
5+
6+
community
7+
OCTET STRING,
8+
9+
pdu
10+
PDUs
11+
}
12+
13+
14+
ObjectName ::=
15+
OBJECT IDENTIFIER
16+
17+
ObjectSyntax ::=
18+
CHOICE {
19+
simple
20+
SimpleSyntax,
21+
22+
application-wide
23+
ApplicationSyntax
24+
}
25+
26+
SimpleSyntax ::=
27+
CHOICE {
28+
integer-value
29+
INTEGER,
30+
31+
string-value
32+
OCTET STRING,
33+
34+
objectID-value
35+
OBJECT IDENTIFIER
36+
}
37+
38+
ApplicationSyntax ::=
39+
CHOICE {
40+
ipAddress-value
41+
IpAddress,
42+
43+
counter-value
44+
Counter32,
45+
46+
timeticks-value
47+
TimeTicks,
48+
49+
arbitrary-value
50+
Opaque,
51+
52+
big-counter-value
53+
Counter64,
54+
55+
unsigned-integer-value
56+
Unsigned32
57+
}
58+
59+
IpAddress ::=
60+
[APPLICATION 0]
61+
IMPLICIT OCTET STRING OPTIONAL ({snmp_helper})
62+
63+
Counter32 ::=
64+
[APPLICATION 1]
65+
IMPLICIT INTEGER OPTIONAL
66+
67+
Unsigned32 ::=
68+
[APPLICATION 2]
69+
IMPLICIT INTEGER OPTIONAL
70+
71+
Gauge32 ::= Unsigned32 OPTIONAL
72+
73+
TimeTicks ::=
74+
[APPLICATION 3]
75+
IMPLICIT INTEGER OPTIONAL
76+
77+
Opaque ::=
78+
[APPLICATION 4]
79+
IMPLICIT OCTET STRING OPTIONAL
80+
81+
Counter64 ::=
82+
[APPLICATION 6]
83+
IMPLICIT INTEGER OPTIONAL
84+
85+
PDUs ::=
86+
CHOICE {
87+
get-request
88+
GetRequest-PDU,
89+
90+
get-next-request
91+
GetNextRequest-PDU,
92+
93+
get-bulk-request
94+
GetBulkRequest-PDU,
95+
96+
response
97+
Response-PDU,
98+
99+
set-request
100+
SetRequest-PDU,
101+
102+
inform-request
103+
InformRequest-PDU,
104+
105+
snmpV2-trap
106+
SNMPv2-Trap-PDU,
107+
108+
report
109+
Report-PDU
110+
}
111+
112+
GetRequest-PDU ::=
113+
[0] IMPLICIT PDU OPTIONAL
114+
115+
GetNextRequest-PDU ::=
116+
[1] IMPLICIT PDU OPTIONAL
117+
118+
Response-PDU ::=
119+
[2] IMPLICIT PDU OPTIONAL
120+
121+
SetRequest-PDU ::=
122+
[3] IMPLICIT PDU OPTIONAL
123+
124+
-- [4] is obsolete
125+
126+
GetBulkRequest-PDU ::=
127+
[5] IMPLICIT PDU OPTIONAL
128+
129+
InformRequest-PDU ::=
130+
[6] IMPLICIT PDU OPTIONAL
131+
132+
SNMPv2-Trap-PDU ::=
133+
[7] IMPLICIT PDU OPTIONAL
134+
135+
Report-PDU ::=
136+
[8] IMPLICIT PDU OPTIONAL
137+
138+
PDU ::=
139+
SEQUENCE {
140+
request-id
141+
INTEGER,
142+
143+
error-status
144+
INTEGER,
145+
146+
error-index
147+
INTEGER,
148+
149+
variable-bindings
150+
VarBindList
151+
}
152+
153+
154+
VarBind ::=
155+
SEQUENCE {
156+
name
157+
ObjectName,
158+
159+
CHOICE {
160+
value
161+
ObjectSyntax,
162+
163+
unSpecified
164+
NULL,
165+
166+
noSuchObject
167+
[0] IMPLICIT NULL,
168+
169+
noSuchInstance
170+
[1] IMPLICIT NULL,
171+
172+
endOfMibView
173+
[2] IMPLICIT NULL
174+
}
175+
}
176+
177+
VarBindList ::= SEQUENCE OF VarBind

0 commit comments

Comments
 (0)