Class: RbBCC::TableBase
- Inherits:
-
Object
- Object
- RbBCC::TableBase
- Includes:
- Enumerable, Fiddle::Importer, CPUHelper
- Defined in:
- lib/rbbcc/table.rb
Direct Known Subclasses
Instance Attribute Summary collapse
-
#bpf ⇒ Object
readonly
Returns the value of attribute bpf.
-
#flags ⇒ Object
readonly
Returns the value of attribute flags.
-
#keysize ⇒ Object
readonly
Returns the value of attribute keysize.
-
#keytype ⇒ Object
readonly
Returns the value of attribute keytype.
-
#leafsize ⇒ Object
readonly
Returns the value of attribute leafsize.
-
#leaftype ⇒ Object
readonly
Returns the value of attribute leaftype.
-
#map_fd ⇒ Object
readonly
Returns the value of attribute map_fd.
-
#map_id ⇒ Object
readonly
Returns the value of attribute map_id.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#ttype ⇒ Object
readonly
Returns the value of attribute ttype.
Instance Method Summary collapse
- #[](_key) ⇒ Object
- #[]=(_key, _leaf) ⇒ Object
- #clear ⇒ Object
- #delete(key) ⇒ Object
- #each_key ⇒ Object
- #each_pair ⇒ Object (also: #each)
- #each_value ⇒ Object
- #fetch(key) ⇒ Object
-
#initialize(bpf, map_id, map_fd, keytype, leaftype, name: nil) ⇒ TableBase
constructor
A new instance of TableBase.
- #items ⇒ Object
- #next(key) ⇒ Object
- #print_linear_hist(val_type = "value", section_header: "Bucket ptr", section_print_fn: nil, bucket_fn: nil, bucket_sort_fn: nil) ⇒ Object
- #print_log2_hist(val_type = "value", section_header: "Bucket ptr", section_print_fn: nil, bucket_fn: nil, strip_leading_zero: false, bucket_sort_fn: nil) ⇒ Object
- #structured_key? ⇒ Boolean
- #values ⇒ Object
Methods included from CPUHelper
_read_cpu_range, get_online_cpus, get_possible_cpus
Constructor Details
#initialize(bpf, map_id, map_fd, keytype, leaftype, name: nil) ⇒ TableBase
Returns a new instance of TableBase.
118 119 120 121 122 123 124 125 126 |
# File 'lib/rbbcc/table.rb', line 118 def initialize(bpf, map_id, map_fd, keytype, leaftype, name: nil) @bpf, @map_id, @map_fd, @keysize, @leafsize = \ bpf, map_id, map_fd, sizeof(keytype), sizeof(leaftype) @keytype = keytype @leaftype = leaftype @ttype = Clib.bpf_table_type_id(self.bpf.module, self.map_id) @flags = Clib.bpf_table_flags_id(self.bpf.module, self.map_id) @name = name end |
Instance Attribute Details
#bpf ⇒ Object (readonly)
Returns the value of attribute bpf.
127 128 129 |
# File 'lib/rbbcc/table.rb', line 127 def bpf @bpf end |
#flags ⇒ Object (readonly)
Returns the value of attribute flags.
127 128 129 |
# File 'lib/rbbcc/table.rb', line 127 def flags @flags end |
#keysize ⇒ Object (readonly)
Returns the value of attribute keysize.
127 128 129 |
# File 'lib/rbbcc/table.rb', line 127 def keysize @keysize end |
#keytype ⇒ Object (readonly)
Returns the value of attribute keytype.
127 128 129 |
# File 'lib/rbbcc/table.rb', line 127 def keytype @keytype end |
#leafsize ⇒ Object (readonly)
Returns the value of attribute leafsize.
127 128 129 |
# File 'lib/rbbcc/table.rb', line 127 def leafsize @leafsize end |
#leaftype ⇒ Object (readonly)
Returns the value of attribute leaftype.
127 128 129 |
# File 'lib/rbbcc/table.rb', line 127 def leaftype @leaftype end |
#map_fd ⇒ Object (readonly)
Returns the value of attribute map_fd.
127 128 129 |
# File 'lib/rbbcc/table.rb', line 127 def map_fd @map_fd end |
#map_id ⇒ Object (readonly)
Returns the value of attribute map_id.
127 128 129 |
# File 'lib/rbbcc/table.rb', line 127 def map_id @map_id end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
127 128 129 |
# File 'lib/rbbcc/table.rb', line 127 def name @name end |
#ttype ⇒ Object (readonly)
Returns the value of attribute ttype.
127 128 129 |
# File 'lib/rbbcc/table.rb', line 127 def ttype @ttype end |
Instance Method Details
#[](_key) ⇒ Object
150 151 152 153 154 155 156 157 158 159 160 |
# File 'lib/rbbcc/table.rb', line 150 def [](_key) key = normalize_key(_key) leaf = Fiddle::Pointer.malloc(self.leafsize) res = Clib.bpf_lookup_elem(self.map_fd, key, leaf) if res < 0 nil end leaf.bcc_value_type = leaftype return leaf end |
#[]=(_key, _leaf) ⇒ Object
166 167 168 169 170 171 172 173 174 |
# File 'lib/rbbcc/table.rb', line 166 def []=(_key, _leaf) key = normalize_key(_key) leaf = normalize_leaf(_leaf) res = Clib.bpf_update_elem(self.map_fd, key, leaf, 0) if res < 0 raise SystemCallError.new("Could not update table", Fiddle.last_error) end leaf end |
#clear ⇒ Object
212 213 214 215 |
# File 'lib/rbbcc/table.rb', line 212 def clear each_key {|key| self.delete(key) } return items # reload contents end |
#delete(key) ⇒ Object
176 177 178 179 180 181 182 |
# File 'lib/rbbcc/table.rb', line 176 def delete(key) res = Clib.bpf_delete_elem(self.map_fd, key) if res < 0 raise KeyError, "key not found" end res end |
#each_key ⇒ Object
184 185 186 187 188 189 190 191 192 193 |
# File 'lib/rbbcc/table.rb', line 184 def each_key k = nil keys = [] loop do k = self.next(k) keys << k yield k end keys end |
#each_pair ⇒ Object Also known as: each
199 200 201 |
# File 'lib/rbbcc/table.rb', line 199 def each_pair each_key {|key| yield(key, self[key]) if self[key] } end |
#each_value ⇒ Object
195 196 197 |
# File 'lib/rbbcc/table.rb', line 195 def each_value each_key {|key| yield(self[key]) if self[key] } end |
#fetch(key) ⇒ Object
162 163 164 |
# File 'lib/rbbcc/table.rb', line 162 def fetch(key) self[key] || raise(KeyError, "key not found") end |
#items ⇒ Object
208 209 210 |
# File 'lib/rbbcc/table.rb', line 208 def items enum_for(:each_pair).to_a end |
#next(key) ⇒ Object
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/rbbcc/table.rb', line 129 def next(key) next_key = Fiddle::Pointer.malloc(self.keysize) if !key res = Clib.bpf_get_first_key(self.map_fd, next_key, next_key.size) else unless key.is_a?(Fiddle::Pointer) raise TypeError, key.inspect end res = Clib.bpf_get_next_key(self.map_fd, key, next_key) end if res < 0 raise StopIteration end return next_key end |
#print_linear_hist(val_type = "value", section_header: "Bucket ptr", section_print_fn: nil, bucket_fn: nil, bucket_sort_fn: nil) ⇒ Object
235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 |
# File 'lib/rbbcc/table.rb', line 235 def print_linear_hist(val_type="value", section_header: "Bucket ptr", section_print_fn: nil, bucket_fn: nil, bucket_sort_fn: nil) if structured_key? raise NotImplementedError else vals = Array.new($linear_index_max) { 0 } each_pair do |k, v| vals[k.to_bcc_value] = v.to_bcc_value end RbBCC.print_linear_hist(vals, val_type) end nil end |
#print_log2_hist(val_type = "value", section_header: "Bucket ptr", section_print_fn: nil, bucket_fn: nil, strip_leading_zero: false, bucket_sort_fn: nil) ⇒ Object
217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 |
# File 'lib/rbbcc/table.rb', line 217 def print_log2_hist(val_type="value", section_header: "Bucket ptr", section_print_fn: nil, bucket_fn: nil, strip_leading_zero: false, bucket_sort_fn: nil) if structured_key? raise NotImplementedError else vals = Array.new($log2_index_max) { 0 } each_pair do |k, v| vals[k.to_bcc_value] = v.to_bcc_value end RbBCC.print_log2_hist(vals, val_type, strip_leading_zero) end nil end |
#structured_key? ⇒ Boolean
252 253 254 |
# File 'lib/rbbcc/table.rb', line 252 def structured_key? false # TODO: implement me in the future end |
#values ⇒ Object
204 205 206 |
# File 'lib/rbbcc/table.rb', line 204 def values enum_for(:each_value).to_a end |