Like regular arrays in Rust, arrays in eBPF are initialised upon
creation. Unlike regular arrays though, the memory is simply initialised
to all zeros without the user having to provide the array elements.
Like regular arrays, accessing the value at a specified index will yield
a reference as long as the index is within the bounds of the array.
At present, the API for `Array::get` returns an `Option` where the
`None` case signals the "out-of-bounds" case. Given that the user never
explicitly provided any values, the `None` case may be mistaked as "the
value has not been set" rather than "out of bounds".
To make this more obvious, we change the API to return a new
`OutOfBounds` error instead. This aligns the API with the user-space
equivalent of the `Array` struct.
Working with aya in vscode will currently show a number of warnings
along the lines of:
```
found duplicate lang item `panic_impl`
the lang item is first defined in crate `std` (which `aya` depends on)
...
second definition in the local crate (`bpf_probe_read`)
```
This comes from feature unification.
integration-test requires the integration-common user feature, which
requires aya, which in turn brings in std.
For this same reason we avoid running clippy across the whole workspace.
We can avoid this issue by using the panic handler from the another
crate, which implements the same loop {} panic handler we use today.
It seems rustc is happy to conditionally link the panic handler
from an external crate without issuing warnings.
Therefore, we add our own crate - ebpf-panic - for this purpose.
Signed-off-by: Dave Tucker <dave@dtucker.co.uk>