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 =

Returns:

  • (::String)
"0.1.1"

Class Method Summary collapse

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;
}