structOpsFindTarget resolves the kernel-side "value struct" for a struct_ops map.
(userType *btf.Struct, cache *btf.Cache)
| 95 | |
| 96 | // structOpsFindTarget resolves the kernel-side "value struct" for a struct_ops map. |
| 97 | func structOpsFindTarget(userType *btf.Struct, cache *btf.Cache) (vType *btf.Struct, id btf.TypeID, module *btf.Handle, err error) { |
| 98 | // the kernel value type name, e.g. "bpf_struct_ops_<name>" |
| 99 | vTypeName := structOpsValuePrefix + userType.Name |
| 100 | |
| 101 | target := btf.Type((*btf.Struct)(nil)) |
| 102 | spec, module, err := findTargetInKernel(vTypeName, &target, cache) |
| 103 | if errors.Is(err, btf.ErrNotFound) { |
| 104 | return nil, 0, nil, fmt.Errorf("%q doesn't exist in kernel: %w", vTypeName, ErrNotSupported) |
| 105 | } |
| 106 | if err != nil { |
| 107 | return nil, 0, nil, fmt.Errorf("lookup value type %q: %w", vTypeName, err) |
| 108 | } |
| 109 | |
| 110 | id, err = spec.TypeID(target) |
| 111 | if err != nil { |
| 112 | return nil, 0, nil, err |
| 113 | } |
| 114 | |
| 115 | return target.(*btf.Struct), id, module, nil |
| 116 | } |
| 117 | |
| 118 | // structOpsPopulateValue writes a `prog FD` which references to `p` into the |
| 119 | // struct_ops value buffer `kernVData` at byte offset `dstOff` corresponding to |
no test coverage detected
searching dependent graphs…