@@ -159,6 +159,38 @@ impl From<PerfEventOpts> for libbpf_sys::bpf_perf_event_opts {
159
159
}
160
160
}
161
161
162
+
163
+ /// Iteration order for cgroups.
164
+ #[ non_exhaustive]
165
+ #[ repr( u32 ) ]
166
+ #[ derive( Clone , Debug , Default ) ]
167
+ pub enum CgroupIterOrder {
168
+ /// Use the default iteration order.
169
+ #[ default]
170
+ Default = libbpf_sys:: BPF_CGROUP_ITER_ORDER_UNSPEC ,
171
+ /// Process only a single object.
172
+ SelfOnly = libbpf_sys:: BPF_CGROUP_ITER_SELF_ONLY ,
173
+ /// Walk descendants in pre-order.
174
+ DescendantsPre = libbpf_sys:: BPF_CGROUP_ITER_DESCENDANTS_PRE ,
175
+ /// Walk descendants in post-order.
176
+ DescendantsPost = libbpf_sys:: BPF_CGROUP_ITER_DESCENDANTS_POST ,
177
+ /// Walk ancestors upward.
178
+ AncestorsUp = libbpf_sys:: BPF_CGROUP_ITER_ANCESTORS_UP ,
179
+ }
180
+
181
+
182
+ /// Options to optionally be provided when attaching to an iterator.
183
+ #[ derive( Clone , Debug , Default ) ]
184
+ pub struct IterOpts < ' fd > {
185
+ /// The file descriptor of the cgroup.
186
+ pub cgroup_fd : Option < BorrowedFd < ' fd > > ,
187
+ /// The iteration to use on the cgroup.
188
+ pub cgroup_order : CgroupIterOrder ,
189
+ #[ doc( hidden) ]
190
+ pub _non_exhaustive : ( ) ,
191
+ }
192
+
193
+
162
194
/// An immutable parsed but not yet loaded BPF program.
163
195
pub type OpenProgram < ' obj > = OpenProgramImpl < ' obj > ;
164
196
/// A mutable parsed but not yet loaded BPF program.
@@ -1319,14 +1351,9 @@ impl<'obj> ProgramMut<'obj> {
1319
1351
)
1320
1352
}
1321
1353
1322
- /// Attach this program to a
1323
- /// [BPF Iterator](https://www.kernel.org/doc/html/latest/bpf/bpf_iterators.html).
1324
- /// The entry point of the program must be defined with `SEC("iter")` or `SEC("iter.s")`.
1325
- pub fn attach_iter ( & self , map_fd : BorrowedFd < ' _ > ) -> Result < Link > {
1326
- let mut linkinfo = libbpf_sys:: bpf_iter_link_info:: default ( ) ;
1327
- linkinfo. map . map_fd = map_fd. as_raw_fd ( ) as _ ;
1354
+ fn attach_iter_impl ( & self , linkinfo : & mut libbpf_sys:: bpf_iter_link_info ) -> Result < Link > {
1328
1355
let attach_opt = libbpf_sys:: bpf_iter_attach_opts {
1329
- link_info : & mut linkinfo as * mut libbpf_sys:: bpf_iter_link_info ,
1356
+ link_info : linkinfo as * mut libbpf_sys:: bpf_iter_link_info ,
1330
1357
link_info_len : size_of :: < libbpf_sys:: bpf_iter_link_info > ( ) as _ ,
1331
1358
sz : size_of :: < libbpf_sys:: bpf_iter_attach_opts > ( ) as _ ,
1332
1359
..Default :: default ( )
@@ -1344,6 +1371,43 @@ impl<'obj> ProgramMut<'obj> {
1344
1371
Ok ( link)
1345
1372
}
1346
1373
1374
+
1375
+ /// Attach this program to a
1376
+ /// [BPF Iterator](https://www.kernel.org/doc/html/latest/bpf/bpf_iterators.html).
1377
+ /// The entry point of the program must be defined with `SEC("iter")` or `SEC("iter.s")`.
1378
+ pub fn attach_iter ( & self , map_fd : BorrowedFd < ' _ > ) -> Result < Link > {
1379
+ let mut linkinfo = libbpf_sys:: bpf_iter_link_info:: default ( ) ;
1380
+ linkinfo. map . map_fd = map_fd. as_raw_fd ( ) as _ ;
1381
+ self . attach_iter_impl ( & mut linkinfo)
1382
+ }
1383
+
1384
+ /// Attach this program to a
1385
+ /// [BPF Iterator](https://www.kernel.org/doc/html/latest/bpf/bpf_iterators.html),
1386
+ /// providing additional options.
1387
+ ///
1388
+ /// The entry point of the program must be defined with `SEC("iter")` or `SEC("iter.s")`.
1389
+ pub fn attach_iter_with_opts (
1390
+ & self ,
1391
+ map_fd : BorrowedFd < ' _ > ,
1392
+ opts : IterOpts < ' _ > ,
1393
+ ) -> Result < Link > {
1394
+ let IterOpts {
1395
+ cgroup_fd,
1396
+ cgroup_order,
1397
+ _non_exhaustive : ( ) ,
1398
+ } = opts;
1399
+
1400
+ let mut linkinfo = libbpf_sys:: bpf_iter_link_info:: default ( ) ;
1401
+ linkinfo. map . map_fd = map_fd. as_raw_fd ( ) as _ ;
1402
+ linkinfo. cgroup . order = cgroup_order as libbpf_sys:: bpf_cgroup_iter_order ;
1403
+
1404
+ if let Some ( cgroup_fd) = cgroup_fd {
1405
+ linkinfo. cgroup . cgroup_fd = cgroup_fd. as_raw_fd ( ) as _ ;
1406
+ }
1407
+
1408
+ self . attach_iter_impl ( & mut linkinfo)
1409
+ }
1410
+
1347
1411
/// Test run the program with the given input data.
1348
1412
///
1349
1413
/// This function uses the
0 commit comments