Skip to content

SEC()

  • SEC()ELF Section을 정의하는 매크로이다.

  • /로 접두사를 구분하기도 한다. (e.g. kprobe/slub_flush)

eBPF Section

  • license

    SEC("license") = "Dual MIT/GPL";

    프로그램에서 특정 BPF helper를 특정하여 사용하려면 GPL 호환 라이선스 하에 라이선스를 선언해야한다. BPF 프로그램의 라이선스는 커널 모듈 라이선스와 동일한 규칙을 따른다. (라이선스 목록 참고)

  • .map

    .maps 섹션을 정의하면 libbpf가 해당 섹션을 토대로 BTF 타입을 정의한다.

    struct {
    ...
    } map_keys SEC(".maps");

Program Sections

그 외 다양한 프로그램들에서 섹션 정보를 활용한다.

Section (Prefix)ProgramTypeAttachTypeAttachFlags
socketSocketFilter
sk_reuseport/migrateSkReuseportAttachSkReuseportSelectOrMigrate
sk_reuseportSkReuseportAttachSkReuseportSelect
kprobe/Kprobe
uprobe/Kprobe
kretprobe/Kprobe
uretprobe/Kprobe
tcSchedCLS
classifierSchedCLS
actionSchedACT
tracepoint/TracePoint
tp/TracePoint
raw_tracepoint/RawTracepoint
raw_tp/RawTracepoint
raw_tracepoint.w/RawTracepointWritable
raw_tp.w/RawTracepointWritable
tp_btf/TracingAttachTraceRawTp
fentry/TracingAttachTraceFEntry
fmod_ret/TracingAttachModifyReturnBPF_F_SLEEPABLE
fexit/TracingAttachTraceFExit
fentry.s/TracingAttachTraceFEntryBPF_F_SLEEPABLE
fmod_ret.s/TracingAttachModifyReturnBPF_F_SLEEPABLE
fexit.s/TracingAttachTraceFExitBPF_F_SLEEPABLE
freplace/Extension
lsm/LSMAttachLSMMac
lsm.s/LSMAttachLSMMacBPF_F_SLEEPABLE
iter/TracingAttachTraceIter
iter.s/TracingAttachTraceIterBPF_F_SLEEPABLE
syscallSyscall
xdp.frags_devmap/XDPAttachXDPDevMapBPF_F_XDP_HAS_FRAGS
xdp_devmap/XDPAttachXDPDevMap
xdp.frags_cpumap/XDPAttachXDPCPUMapBPF_F_XDP_HAS_FRAGS
xdp_cpumap/XDPAttachXDPCPUMap
xdp.fragsXDPBPF_F_XDP_HAS_FRAGS
xdpXDP
perf_eventPerfEvent
lwt_inLWTIn
lwt_outLWTOut
lwt_xmitLWTXmit
lwt_seg6localLWTSeg6Local
cgroup_skb/ingressCGroupSKBAttachCGroupInetIngress
cgroup_skb/egressCGroupSKBAttachCGroupInetEgress
cgroup/skbCGroupSKB
cgroup/sock_createCGroupSockAttachCGroupInetSockCreate
cgroup/sock_releaseCGroupSockAttachCgroupInetSockRelease
cgroup/sockCGroupSockAttachCGroupInetSockCreate
cgroup/post_bind4CGroupSockAttachCGroupInet4PostBind
cgroup/post_bind6CGroupSockAttachCGroupInet6PostBind
cgroup/devCGroupDeviceAttachCGroupDevice
sockopsSockOpsAttachCGroupSockOps
sk_skb/stream_parserSkSKBAttachSkSKBStreamParser
sk_skb/stream_verdictSkSKBAttachSkSKBStreamVerdict
sk_skbSkSKB
sk_msgSkMsgAttachSkMsgVerdict
lirc_mode2LircMode2AttachLircMode2
flow_dissectorFlowDissectorAttachFlowDissector
cgroup/bind4CGroupSockAddrAttachCGroupInet4Bind
cgroup/bind6CGroupSockAddrAttachCGroupInet6Bind
cgroup/connect4CGroupSockAddrAttachCGroupInet4Connect
cgroup/connect6CGroupSockAddrAttachCGroupInet6Connect
cgroup/sendmsg4CGroupSockAddrAttachCGroupUDP4Sendmsg
cgroup/sendmsg6CGroupSockAddrAttachCGroupUDP6Sendmsg
cgroup/recvmsg4CGroupSockAddrAttachCGroupUDP4Recvmsg
cgroup/recvmsg6CGroupSockAddrAttachCGroupUDP6Recvmsg
cgroup/getpeername4CGroupSockAddrAttachCgroupInet4GetPeername
cgroup/getpeername6CGroupSockAddrAttachCgroupInet6GetPeername
cgroup/getsockname4CGroupSockAddrAttachCgroupInet4GetSockname
cgroup/getsockname6CGroupSockAddrAttachCgroupInet6GetSockname
cgroup/sysctlCGroupSysctlAttachCGroupSysctl
cgroup/getsockoptCGroupSockoptAttachCGroupGetsockopt
cgroup/setsockoptCGroupSockoptAttachCGroupSetsockopt
struct_ops+StructOps
sk_lookup/SkLookupAttachSkLookup
seccompSocketFilter
kprobe.multiKprobeAttachTraceKprobeMulti
kretprobe.multiKprobe

참고