bpf_link_info.iter is used by link_query to return
bpf_iter_link_info to user space. Fields may be different
,e.g., map_fd vs. map_id, so we cannot reuse
the exact structure. But make them similar, e.g.,
  struct bpf_link_info {
     /* common fields */
     union {
        struct { ... } raw_tracepoint;
        struct { ... } tracing;
        ...
        struct {
            /* common fields for iter */
            union {
                struct {
                    __u32 map_id;
                } map;
                /* other structs for other targets */
            };
        };
    };
 };
so the structure is extensible the same way as
bpf_iter_link_info.

Fixes: 6b0a249a301e ("bpf: Implement link_query for bpf iterators")
Signed-off-by: Yonghong Song <y...@fb.com>
---
 include/uapi/linux/bpf.h       | 6 ++++--
 tools/include/uapi/linux/bpf.h | 6 ++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
index 0388bc0200b0..ef7af384f5ee 100644
--- a/include/uapi/linux/bpf.h
+++ b/include/uapi/linux/bpf.h
@@ -4251,8 +4251,10 @@ struct bpf_link_info {
                        __aligned_u64 target_name; /* in/out: target_name 
buffer ptr */
                        __u32 target_name_len;     /* in/out: target_name 
buffer len */
                        union {
-                               __u32 map_id;
-                       } map;
+                               struct {
+                                       __u32 map_id;
+                               } map;
+                       };
                } iter;
                struct  {
                        __u32 netns_ino;
diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h
index 0388bc0200b0..ef7af384f5ee 100644
--- a/tools/include/uapi/linux/bpf.h
+++ b/tools/include/uapi/linux/bpf.h
@@ -4251,8 +4251,10 @@ struct bpf_link_info {
                        __aligned_u64 target_name; /* in/out: target_name 
buffer ptr */
                        __u32 target_name_len;     /* in/out: target_name 
buffer len */
                        union {
-                               __u32 map_id;
-                       } map;
+                               struct {
+                                       __u32 map_id;
+                               } map;
+                       };
                } iter;
                struct  {
                        __u32 netns_ino;
-- 
2.24.1

Reply via email to