Skip to content

Commit 6ab3e9a

Browse files
committed
refactor: modify constant isolated Netlink Iflink
1 parent 0cd8e93 commit 6ab3e9a

File tree

4 files changed

+296
-24
lines changed

4 files changed

+296
-24
lines changed
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package Sys::Ebpf::Link::Netlink::Constants::Netlink;
2+
3+
use strict;
4+
use warnings;
5+
use utf8;
6+
7+
use Exporter 'import';
8+
9+
# cf. https://github.com/torvalds/linux/blob/master/tools/include/uapi/linux/netlink.h
10+
my %constants = (
11+
'NETLINK_ROUTE' => 0,
12+
'NETLINK_UNUSED' => 1,
13+
'NETLINK_USERSOCK' => 2,
14+
'NETLINK_FIREWALL' => 3,
15+
'NETLINK_SOCK_DIAG' => 4,
16+
'NETLINK_NFLOG' => 5,
17+
'NETLINK_XFRM' => 6,
18+
'NETLINK_SELINUX' => 7,
19+
'NETLINK_ISCSI' => 8,
20+
'NETLINK_AUDIT' => 9,
21+
'NETLINK_FIB_LOOKUP' => 10,
22+
'NETLINK_CONNECTOR' => 11,
23+
'NETLINK_NETFILTER' => 12,
24+
'NETLINK_IP6_FW' => 13,
25+
'NETLINK_DNRTMSG' => 14,
26+
'NETLINK_KOBJECT_UEVENT' => 15,
27+
'NETLINK_GENERIC' => 16,
28+
'NETLINK_SCSITRANSPORT' => 18,
29+
'NETLINK_ECRYPTFS' => 19,
30+
'NETLINK_RDMA' => 20,
31+
'NETLINK_CRYPTO' => 21,
32+
'NETLINK_SMC' => 22,
33+
34+
'NLMSG_NOOP' => 1,
35+
'NLMSG_ERROR' => 2,
36+
'NLMSG_DONE' => 3,
37+
'NLMSG_OVERRUN' => 4,
38+
39+
# /* Flags values */
40+
'NLM_F_REQUEST' => 0x01,
41+
'NLM_F_MULTI' => 0x02,
42+
'NLM_F_ACK' => 0x04,
43+
'NLM_F_ECHO' => 0x08,
44+
'NLM_F_DUMP_INTR' => 0x10,
45+
'NLM_F_DUMP_FILTERED' => 0x20,
46+
47+
# /* Modifiers to GET request */
48+
'NLM_F_ROOT' => 0x100,
49+
'NLM_F_MATCH' => 0x200,
50+
'NLM_F_ATOMIC' => 0x400,
51+
52+
# 'NLM_F_DUMP' => ( NLM_F_ROOT | NLM_F_MATCH ),
53+
54+
# /* Modifiers to NEW request */
55+
'NLM_F_REPLACE' => 0x100,
56+
'NLM_F_EXCL' => 0x200,
57+
'NLM_F_CREATE' => 0x400,
58+
'NLM_F_APPEND' => 0x800,
59+
60+
# /* Modifiers to DELETE request */
61+
'NLM_F_NONREC' => 0x100,
62+
63+
# /* Flags for ACK message */
64+
'NLM_F_CAPPED' => 0x100,
65+
'NLM_F_ACK_TLVS' => 0x200,
66+
67+
# /* Attribute types */
68+
'NLA_F_NESTED' => ( 1 << 15 ),
69+
'NLA_F_NET_BYTEORDER' => ( 1 << 14 ),
70+
'NLMSG_HDRLEN' => 16,
71+
'NLA_HDRLEN' => 4,
72+
73+
# Socket options
74+
'NETLINK_ADD_MEMBERSHIP' => 1,
75+
'NETLINK_DROP_MEMBERSHIP' => 2,
76+
'NETLINK_PKTINFO' => 3,
77+
'NETLINK_BROADCAST_ERROR' => 4,
78+
'NETLINK_NO_ENOBUFS' => 5,
79+
'NETLINK_RX_RING' => 6,
80+
'NETLINK_TX_RING' => 7,
81+
'NETLINK_LISTEN_ALL_NSID' => 8,
82+
'NETLINK_CAP_ACK' => 10,
83+
'NETLINK_EXT_ACK' => 11,
84+
'NETLINK_GET_STRICT_CHK' => 12,
85+
);
86+
87+
# Export all constants
88+
our @EXPORT_OK = keys %constants;
89+
our %EXPORT_TAGS = ( all => \@EXPORT_OK );
90+
91+
# Define constants as subroutines
92+
for my $name (@EXPORT_OK) {
93+
no strict 'refs';
94+
*{$name} = sub () { $constants{$name} };
95+
}
96+
97+
1;
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
package Sys::Ebpf::Link::Netlink::Constants::Socket;
2+
3+
use strict;
4+
use warnings;
5+
use utf8;
6+
7+
use Exporter 'import';
8+
9+
# cf. https://github.com/torvalds/linux/blob/master/include/linux/socket.h
10+
my %constants = (
11+
12+
# /* Supported address families. */
13+
'AF_UNSPEC' => 0,
14+
'AF_UNIX' => 1,
15+
'AF_INET' => 2,
16+
'AF_AX25' => 3,
17+
'AF_IPX' => 4,
18+
'AF_APPLETALK' => 5,
19+
'AF_NETROM' => 6,
20+
'AF_BRIDGE' => 7,
21+
'AF_ATMPVC' => 8,
22+
'AF_X25' => 9,
23+
'AF_INET6' => 10,
24+
'AF_ROSE' => 11,
25+
'AF_DECnet' => 12,
26+
'AF_NETBEUI' => 13,
27+
'AF_SECURITY' => 14,
28+
'AF_KEY' => 15,
29+
'AF_NETLINK' => 16,
30+
'AF_ROUTE' => 16,
31+
'AF_PACKET' => 17,
32+
'AF_ASH' => 18,
33+
'AF_ECONET' => 19,
34+
'AF_ATMSVC' => 20,
35+
'AF_RDS' => 21,
36+
'AF_SNA' => 22,
37+
'AF_IRDA' => 23,
38+
'AF_PPPOX' => 24,
39+
'AF_WANPIPE' => 25,
40+
'AF_LLC' => 26,
41+
'AF_IB' => 27,
42+
'AF_MPLS' => 28,
43+
'AF_CAN' => 29,
44+
'AF_TIPC' => 30,
45+
'AF_BLUETOOTH' => 31,
46+
'AF_IUCV' => 32,
47+
'AF_RXRPC' => 33,
48+
'AF_ISDN' => 34,
49+
'AF_PHONET' => 35,
50+
'AF_IEEE802154' => 36,
51+
'AF_CAIF' => 37,
52+
'AF_ALG' => 38,
53+
'AF_NFC' => 39,
54+
'AF_VSOCK' => 40,
55+
'AF_KCM' => 41,
56+
'AF_QIPCRTR' => 42,
57+
'AF_SMC' => 43,
58+
'AF_XDP' => 44,
59+
'AF_MCTP' => 45,
60+
61+
# /* Protocol families, same as address families. */
62+
'PF_UNSPEC' => 0,
63+
'PF_UNIX' => 1,
64+
'PF_LOCAL' => 1,
65+
'PF_INET' => 2,
66+
'PF_AX25' => 3,
67+
'PF_IPX' => 4,
68+
'PF_APPLETALK' => 5,
69+
'PF_NETROM' => 6,
70+
'PF_BRIDGE' => 7,
71+
'PF_ATMPVC' => 8,
72+
'PF_X25' => 9,
73+
'PF_INET6' => 10,
74+
'PF_ROSE' => 11,
75+
'PF_DECnet' => 12,
76+
'PF_NETBEUI' => 13,
77+
'PF_SECURITY' => 14,
78+
'PF_KEY' => 15,
79+
'PF_NETLINK' => 16,
80+
'PF_ROUTE' => 16,
81+
'PF_PACKET' => 17,
82+
'PF_ASH' => 18,
83+
'PF_ECONET' => 19,
84+
'PF_ATMSVC' => 20,
85+
'PF_RDS' => 21,
86+
'PF_SNA' => 22,
87+
'PF_IRDA' => 23,
88+
'PF_PPPOX' => 24,
89+
'PF_WANPIPE' => 25,
90+
'PF_LLC' => 26,
91+
'PF_IB' => 27,
92+
'PF_MPLS' => 28,
93+
'PF_CAN' => 29,
94+
'PF_TIPC' => 30,
95+
'PF_BLUETOOTH' => 31,
96+
'PF_IUCV' => 32,
97+
'PF_RXRPC' => 33,
98+
'PF_ISDN' => 34,
99+
'PF_PHONET' => 35,
100+
'PF_IEEE802154' => 36,
101+
'PF_CAIF' => 37,
102+
'PF_ALG' => 38,
103+
'PF_NFC' => 39,
104+
'PF_VSOCK' => 40,
105+
'PF_KCM' => 41,
106+
'PF_QIPCRTR' => 42,
107+
'PF_SMC' => 43,
108+
'PF_XDP' => 44,
109+
'PF_MCTP' => 45,
110+
111+
# /* Setsockoptions(2) level. Thanks to BSD these must match IPPROTO_xxx */
112+
'SOL_IP' => 0,
113+
'SOL_SOCKET' => 1,
114+
'SOL_TCP' => 6,
115+
'SOL_UDP' => 17,
116+
'SOL_IPV6' => 41,
117+
'SOL_ICMPV6' => 58,
118+
'SOL_SCTP' => 132,
119+
'SOL_UDPLITE' => 136,
120+
'SOL_RAW' => 255,
121+
'SOL_IPX' => 256,
122+
'SOL_AX25' => 257,
123+
'SOL_ATALK' => 258,
124+
'SOL_NETROM' => 259,
125+
'SOL_ROSE' => 260,
126+
'SOL_DECNET' => 261,
127+
'SOL_X25' => 262,
128+
'SOL_PACKET' => 263,
129+
'SOL_ATM' => 264,
130+
'SOL_AAL' => 265,
131+
'SOL_IRDA' => 266,
132+
'SOL_NETBEUI' => 267,
133+
'SOL_LLC' => 268,
134+
'SOL_DCCP' => 269,
135+
'SOL_NETLINK' => 270,
136+
'SOL_TIPC' => 271,
137+
'SOL_RXRPC' => 272,
138+
'SOL_PPPOL2TP' => 273,
139+
'SOL_BLUETOOTH' => 274,
140+
'SOL_PNPIPE' => 275,
141+
'SOL_RDS' => 276,
142+
'SOL_IUCV' => 277,
143+
'SOL_CAIF' => 278,
144+
'SOL_ALG' => 279,
145+
'SOL_NFC' => 280,
146+
'SOL_KCM' => 281,
147+
'SOL_TLS' => 282,
148+
'SOL_XDP' => 283,
149+
'SOL_MPTCP' => 284,
150+
'SOL_MCTP' => 285,
151+
'SOL_SMC' => 286,
152+
'SOL_VSOCK' => 287,
153+
);
154+
155+
# Export all constants
156+
our @EXPORT_OK = keys %constants;
157+
our %EXPORT_TAGS = ( all => \@EXPORT_OK );
158+
159+
# Define constants as subroutines
160+
for my $name (@EXPORT_OK) {
161+
no strict 'refs';
162+
*{$name} = sub () { $constants{$name} };
163+
}
164+
165+
1;

lib/Sys/Ebpf/Link/Netlink/Socket.pm

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,26 @@ use Socket qw( SOCK_RAW );
66
use Errno ();
77
use Exporter 'import';
88

9-
our @EXPORT_OK
10-
= qw(pack_sockaddr_nl pack_nlattr pack_nlmsghdr pack_ifinfomsg);
11-
12-
use constant {
13-
NETLINK_ROUTE => 0,
14-
NLMSG_HDRLEN => 16,
15-
NLA_HDRLEN => 4,
16-
NLM_F_REQUEST => 0x0001,
17-
NLM_F_ACK => 0x0004,
18-
PF_NETLINK => 16,
19-
AF_NETLINK => 16,
20-
SOL_NETLINK => 270,
21-
NETLINK_EXT_ACK => 11,
22-
};
9+
use Sys::Ebpf::Link::Netlink::Constants::Netlink qw(
10+
NETLINK_ROUTE
11+
NLMSG_HDRLEN
12+
NLA_HDRLEN
13+
NLM_F_REQUEST
14+
NLM_F_ACK
15+
NETLINK_EXT_ACK
16+
);
17+
use Sys::Ebpf::Link::Netlink::Constants::Socket qw(
18+
PF_NETLINK
19+
AF_NETLINK
20+
SOL_NETLINK
21+
);
22+
23+
our @EXPORT_OK = qw(
24+
pack_sockaddr_nl
25+
pack_nlattr
26+
pack_nlmsghdr
27+
pack_ifinfomsg
28+
);
2329

2430
sub new {
2531
my ( $class, %args ) = @_;

lib/Sys/Ebpf/Link/Netlink/Xdp.pm

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ package Sys::Ebpf::Link::Netlink::Xdp;
33
use strict;
44
use warnings;
55
use IO::Interface::Simple ();
6-
use Sys::Ebpf::Link::Netlink::Socket;
6+
use Sys::Ebpf::Link::Netlink::Socket
7+
qw(pack_nlattr pack_nlmsghdr pack_ifinfomsg);
78
use Sys::Ebpf::Link::Netlink::Constants::Iflink qw(
89
IFLA_XDP
910
IFLA_XDP_FD
@@ -13,20 +14,23 @@ use Sys::Ebpf::Link::Netlink::Constants::Iflink qw(
1314
XDP_FLAGS_SKB_MODE
1415
XDP_FLAGS_DRV_MODE
1516
);
17+
use Sys::Ebpf::Link::Netlink::Constants::Netlink qw(
18+
NLA_F_NESTED
19+
NLM_F_REQUEST
20+
NLM_F_ACK
21+
NLMSG_HDRLEN
22+
NLA_HDRLEN
23+
NETLINK_ROUTE
24+
NLMSG_ERROR
25+
);
26+
1627
use Socket qw( AF_UNSPEC );
1728
use Errno ();
1829

1930
# 定数の定義
2031
use constant {
21-
RTM_SETLINK => 19,
22-
NLA_F_NESTED => 0x8000,
23-
NLM_F_REQUEST => 0x0001,
24-
NLM_F_ACK => 0x0004,
25-
NLMSG_HDRLEN => 16,
26-
NLA_HDRLEN => 4,
27-
NETLINK_ROUTE => 0, # NETLINK_ROUTEの定義
28-
NLMSG_ERROR => 2, # NLMSG_ERRORの定義
29-
IFF_UP => 1 << 0,
32+
RTM_SETLINK => 19,
33+
IFF_UP => 1 << 0,
3034
};
3135

3236
# ヘルパー関数をインポート

0 commit comments

Comments
 (0)