Module: LibBPFRuby

Defined in:
lib/libbpf-ruby/version.rb,
ext/libbpf_ruby/libbpf_ruby.c

Overview

rbs_inline: enabled frozen_string_literal: true

Defined Under Namespace

Classes: Link, Object, Program

Constant Summary collapse

VERSION =
"0.2.0"

Class Method Summary collapse

Class Method Details

.attach_reuseport(socket, program_fd) ⇒ Object



544
545
546
547
548
549
550
551
# File 'ext/libbpf_ruby/libbpf_ruby.c', line 544

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



534
535
536
537
538
539
540
541
542
# File 'ext/libbpf_ruby/libbpf_ruby.c', line 534

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



516
517
518
519
520
521
522
523
# File 'ext/libbpf_ruby/libbpf_ruby.c', line 516

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



525
526
527
528
529
530
531
532
# File 'ext/libbpf_ruby/libbpf_ruby.c', line 525

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