@ -49,6 +49,7 @@ static int load_and_attach(const char *event, struct bpf_insn *prog, int size)
bool is_socket = strncmp ( event , " socket " , 6 ) = = 0 ;
bool is_kprobe = strncmp ( event , " kprobe/ " , 7 ) = = 0 ;
bool is_kretprobe = strncmp ( event , " kretprobe/ " , 10 ) = = 0 ;
bool is_tracepoint = strncmp ( event , " tracepoint/ " , 11 ) = = 0 ;
enum bpf_prog_type prog_type ;
char buf [ 256 ] ;
int fd , efd , err , id ;
@ -63,6 +64,8 @@ static int load_and_attach(const char *event, struct bpf_insn *prog, int size)
prog_type = BPF_PROG_TYPE_SOCKET_FILTER ;
} else if ( is_kprobe | | is_kretprobe ) {
prog_type = BPF_PROG_TYPE_KPROBE ;
} else if ( is_tracepoint ) {
prog_type = BPF_PROG_TYPE_TRACEPOINT ;
} else {
printf ( " Unknown event '%s' \n " , event ) ;
return - 1 ;
@ -111,12 +114,23 @@ static int load_and_attach(const char *event, struct bpf_insn *prog, int size)
event , strerror ( errno ) ) ;
return - 1 ;
}
}
strcpy ( buf , DEBUGFS ) ;
strcat ( buf , " events/kprobes/ " ) ;
strcat ( buf , event ) ;
strcat ( buf , " /id " ) ;
strcpy ( buf , DEBUGFS ) ;
strcat ( buf , " events/kprobes/ " ) ;
strcat ( buf , event ) ;
strcat ( buf , " /id " ) ;
} else if ( is_tracepoint ) {
event + = 11 ;
if ( * event = = 0 ) {
printf ( " event name cannot be empty \n " ) ;
return - 1 ;
}
strcpy ( buf , DEBUGFS ) ;
strcat ( buf , " events/ " ) ;
strcat ( buf , event ) ;
strcat ( buf , " /id " ) ;
}
efd = open ( buf , O_RDONLY , 0 ) ;
if ( efd < 0 ) {
@ -304,6 +318,7 @@ int load_bpf_file(char *path)
if ( memcmp ( shname_prog , " kprobe/ " , 7 ) = = 0 | |
memcmp ( shname_prog , " kretprobe/ " , 10 ) = = 0 | |
memcmp ( shname_prog , " tracepoint/ " , 11 ) = = 0 | |
memcmp ( shname_prog , " socket " , 6 ) = = 0 )
load_and_attach ( shname_prog , insns , data_prog - > d_size ) ;
}
@ -320,6 +335,7 @@ int load_bpf_file(char *path)
if ( memcmp ( shname , " kprobe/ " , 7 ) = = 0 | |
memcmp ( shname , " kretprobe/ " , 10 ) = = 0 | |
memcmp ( shname , " tracepoint/ " , 11 ) = = 0 | |
memcmp ( shname , " socket " , 6 ) = = 0 )
load_and_attach ( shname , data - > d_buf , data - > d_size ) ;
}