Module: LibBPFRuby
- Defined in:
- lib/libbpf-ruby/version.rb,
sig/generated/libbpf-ruby/version.rbs,
ext/libbpf_ruby/libbpf_ruby.c
Defined Under Namespace
Classes: Object
Constant Summary collapse
- VERSION =
"0.1.1"
Class Method Summary collapse
- .attach_reuseport(socket, program_fd) ⇒ Object
- .map_lookup(map_fd, key, value_size) ⇒ Object
- .map_update(map_fd, key, value) ⇒ Object
- .sockmap_update(map_fd, key, socket) ⇒ Object
Class Method Details
.attach_reuseport(socket, program_fd) ⇒ Object
125 126 127 128 129 130 131 132 |
# File 'ext/libbpf_ruby/libbpf_ruby.c', line 125
static VALUE rb_mLibBPFRuby_attach_reuseport(VALUE self, VALUE socket, VALUE program_fd) {
int sock_fd = rb_io_descriptor(socket);
int prog_fd = NUM2INT(program_fd);
if (setsockopt(sock_fd, SOL_SOCKET, SO_ATTACH_REUSEPORT_EBPF, &prog_fd, sizeof(prog_fd)) < 0) {
rb_raise(rb_eRuntimeError, "SO_ATTACH_REUSEPORT_EBPF failed: %s", strerror(errno));
}
return Qtrue;
}
|
.map_lookup(map_fd, key, value_size) ⇒ Object
115 116 117 118 119 120 121 122 123 |
# File 'ext/libbpf_ruby/libbpf_ruby.c', line 115
static VALUE rb_mLibBPFRuby_map_lookup(VALUE self, VALUE map_fd, VALUE key, VALUE value_size) {
Check_Type(key, T_STRING);
VALUE value = rb_str_new(NULL, NUM2LONG(value_size));
if (bpf_map_lookup_elem(NUM2INT(map_fd), RSTRING_PTR(key), RSTRING_PTR(value)) < 0) {
if (errno == ENOENT) return Qnil;
rb_raise(rb_eRuntimeError, "bpf_map_lookup_elem failed: %s", strerror(errno));
}
return value;
}
|
.map_update(map_fd, key, value) ⇒ Object
97 98 99 100 101 102 103 104 |
# File 'ext/libbpf_ruby/libbpf_ruby.c', line 97
static VALUE rb_mLibBPFRuby_map_update(VALUE self, VALUE map_fd, VALUE key, VALUE value) {
Check_Type(key, T_STRING);
Check_Type(value, T_STRING);
if (bpf_map_update_elem(NUM2INT(map_fd), RSTRING_PTR(key), RSTRING_PTR(value), BPF_ANY) < 0) {
rb_raise(rb_eRuntimeError, "bpf_map_update_elem failed: %s", strerror(errno));
}
return Qtrue;
}
|
.sockmap_update(map_fd, key, socket) ⇒ Object
106 107 108 109 110 111 112 113 |
# File 'ext/libbpf_ruby/libbpf_ruby.c', line 106
static VALUE rb_mLibBPFRuby_sockmap_update(VALUE self, VALUE map_fd, VALUE key, VALUE socket) {
Check_Type(key, T_STRING);
__u64 fd = (__u64)rb_io_descriptor(socket);
if (bpf_map_update_elem(NUM2INT(map_fd), RSTRING_PTR(key), &fd, BPF_ANY) < 0) {
rb_raise(rb_eRuntimeError, "bpf_map_update_elem failed: %s", strerror(errno));
}
return Qtrue;
}
|