@@ -7,7 +7,7 @@ use netlink_packet_core::{
77} ;
88
99use crate :: {
10- buffer:: NetfilterBuffer , conntrack:: ConntrackMessage , nflog:: NfLogMessage ,
10+ buffer:: NetfilterBuffer , conntrack:: ConntrackMessage , nflog:: ULogMessage ,
1111} ;
1212
1313pub ( crate ) const NETFILTER_HEADER_LEN : usize = 4 ;
@@ -60,21 +60,53 @@ impl<T: AsRef<[u8]>> Parseable<NetfilterHeaderBuffer<T>> for NetfilterHeader {
6060 }
6161}
6262
63+ // Defined in Linux kernel: include/uapi/linux/netfilter/nfnetlink.h
64+ pub const NFNL_SUBSYS_CTNETLINK : u8 = 1 ;
65+ pub const NFNL_SUBSYS_ULOG : u8 = 4 ;
66+
67+ #[ derive( Debug , PartialEq , Eq , Clone , Copy ) ]
68+ #[ non_exhaustive]
69+ pub enum Subsystem {
70+ ULog ,
71+ Conntrack ,
72+ Other ( u8 ) ,
73+ }
74+
75+ impl From < u8 > for Subsystem {
76+ fn from ( value : u8 ) -> Self {
77+ match value {
78+ NFNL_SUBSYS_ULOG => Self :: ULog ,
79+ NFNL_SUBSYS_CTNETLINK => Self :: Conntrack ,
80+ v => Self :: Other ( v) ,
81+ }
82+ }
83+ }
84+
85+ impl From < Subsystem > for u8 {
86+ fn from ( value : Subsystem ) -> Self {
87+ match value {
88+ Subsystem :: ULog => NFNL_SUBSYS_ULOG ,
89+ Subsystem :: Conntrack => NFNL_SUBSYS_CTNETLINK ,
90+ Subsystem :: Other ( v) => v,
91+ }
92+ }
93+ }
94+
6395#[ derive( Debug , PartialEq , Eq , Clone ) ]
6496#[ non_exhaustive]
6597pub enum NetfilterMessageInner {
66- NfLog ( NfLogMessage ) ,
98+ ULog ( ULogMessage ) ,
6799 Conntrack ( ConntrackMessage ) ,
68100 Other {
69- subsys : u8 ,
101+ subsys : Subsystem ,
70102 message_type : u8 ,
71103 attributes : Vec < DefaultNla > ,
72104 } ,
73105}
74106
75- impl From < NfLogMessage > for NetfilterMessageInner {
76- fn from ( message : NfLogMessage ) -> Self {
77- Self :: NfLog ( message)
107+ impl From < ULogMessage > for NetfilterMessageInner {
108+ fn from ( message : ULogMessage ) -> Self {
109+ Self :: ULog ( message)
78110 }
79111}
80112impl From < ConntrackMessage > for NetfilterMessageInner {
@@ -86,7 +118,7 @@ impl From<ConntrackMessage> for NetfilterMessageInner {
86118impl Emitable for NetfilterMessageInner {
87119 fn buffer_len ( & self ) -> usize {
88120 match self {
89- NetfilterMessageInner :: NfLog ( message) => message. buffer_len ( ) ,
121+ NetfilterMessageInner :: ULog ( message) => message. buffer_len ( ) ,
90122 NetfilterMessageInner :: Conntrack ( message) => message. buffer_len ( ) ,
91123 NetfilterMessageInner :: Other { attributes, .. } => {
92124 attributes. as_slice ( ) . buffer_len ( )
@@ -96,7 +128,7 @@ impl Emitable for NetfilterMessageInner {
96128
97129 fn emit ( & self , buffer : & mut [ u8 ] ) {
98130 match self {
99- NetfilterMessageInner :: NfLog ( message) => message. emit ( buffer) ,
131+ NetfilterMessageInner :: ULog ( message) => message. emit ( buffer) ,
100132 NetfilterMessageInner :: Conntrack ( message) => message. emit ( buffer) ,
101133 NetfilterMessageInner :: Other { attributes, .. } => {
102134 attributes. as_slice ( ) . emit ( buffer)
@@ -123,19 +155,21 @@ impl NetfilterMessage {
123155 }
124156 }
125157
126- pub fn subsys ( & self ) -> u8 {
158+ pub fn subsys ( & self ) -> Subsystem {
127159 match self . inner {
128- NetfilterMessageInner :: NfLog ( _) => NfLogMessage :: SUBSYS ,
129- NetfilterMessageInner :: Conntrack ( _) => ConntrackMessage :: SUBSYS ,
160+ NetfilterMessageInner :: ULog ( _) => Subsystem :: ULog ,
161+ NetfilterMessageInner :: Conntrack ( _) => Subsystem :: Conntrack ,
130162 NetfilterMessageInner :: Other { subsys, .. } => subsys,
131163 }
132164 }
133165
134- pub fn message_type ( & self ) -> u8 {
166+ fn message_type ( & self ) -> u8 {
135167 match self . inner {
136- NetfilterMessageInner :: NfLog ( ref message) => message. message_type ( ) ,
168+ NetfilterMessageInner :: ULog ( ref message) => {
169+ message. message_type ( ) . into ( )
170+ }
137171 NetfilterMessageInner :: Conntrack ( ref message) => {
138- message. message_type ( )
172+ message. message_type ( ) . into ( )
139173 }
140174 NetfilterMessageInner :: Other { message_type, .. } => message_type,
141175 }
@@ -155,7 +189,7 @@ impl Emitable for NetfilterMessage {
155189
156190impl NetlinkSerializable for NetfilterMessage {
157191 fn message_type ( & self ) -> u16 {
158- ( ( self . subsys ( ) as u16 ) << 8 ) | self . message_type ( ) as u16
192+ ( ( u8 :: from ( self . subsys ( ) ) as u16 ) << 8 ) | self . message_type ( ) as u16
159193 }
160194
161195 fn buffer_len ( & self ) -> usize {
0 commit comments