0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-23 02:01:55 +00:00
Commit Graph

1704 Commits

Author SHA1 Message Date
Vojtech Vilimek
7543da15d8 SNMP: Remove transmit hook, new macros 2023-09-04 13:46:02 +02:00
Vojtech Vilimek
df28d1cbe8 Testing Notify-PDU 2023-09-04 09:25:51 +02:00
Vojtech Vilimek
3c718d162c Minor bugfix 2023-08-30 17:22:52 +02:00
Vojtech Vilimek
4c29a3911e Big code cleanup 2023-08-08 21:51:38 +02:00
Vojtech Vilimek
b3f8b3124d Bugfixes 2023-08-08 20:47:30 +02:00
Vojtech Vilimek
c6bcdf8687 Fix BGP identifier values in BGP4-MIB 2023-08-08 19:54:40 +02:00
Vojtech Vilimek
5f936b4442 Register-PDU distinguish between instance/tree reg.
Other changes include simplification of large TX buffer when it's insufficient
and purge of additional_buffer.
2023-08-08 19:00:54 +02:00
Vojtech Vilimek
bdf68b3240 Extension for varbind TimeTicks, varbind type sizes 2023-08-08 17:00:20 +02:00
Vojtech Vilimek
c8cda68762 fixed snmp_test.c test suite 2023-07-26 14:34:55 +02:00
Vojtech Vilimek
4c7828779e mainly visual tweaks 2023-07-26 14:34:01 +02:00
Vojtech Vilimek
3c26f49107 changes in subagent.c API 2023-07-26 14:30:34 +02:00
Vojtech Vilimek
9f8950d4d7 changes in bgp_mib.c API (mainly) 2023-07-26 14:02:23 +02:00
Vojtech Vilimek
972c717c56 tmp: minor changes 2023-03-31 09:56:39 +02:00
Vojtech Vilimek
14a4535cf0 tmp: minor changes 2023-03-31 09:56:03 +02:00
Vojtech Vilimek
ed676cd1c5 tmp: minor changes + fixed tests 2023-03-24 15:02:23 +01:00
Vojtech Vilimek
3ec802e7f0 tmp: add new bgp mib entry support (bgpPeerTable) 2023-03-24 15:01:35 +01:00
Vojtech Vilimek
d4d925cbea tmp: add new helper function 2023-03-24 15:00:54 +01:00
Vojtech Vilimek
fb2e47d566 tmp: fix parsing multiple in rx buffer 2023-03-14 14:10:08 +01:00
Vojtech Vilimek
908aa67e1c tmp: minor changes 2023-03-14 14:09:45 +01:00
Vojtech Vilimek
29da25c2d0 code cleanup 2022-12-17 18:24:05 +01:00
Vojtech Vilimek
23b467318c tmp 2022-12-17 18:16:19 +01:00
Vojtech Vilimek
2a4fedb6e0 tmp: compiles and runs 2022-12-10 18:08:00 +01:00
Vojtech Vilimek
721524abb8 snmp reconnect 2022-12-10 13:23:50 +01:00
Vojtech Vilimek
8d4926b0f5 snmp_log() wrapper 2022-12-10 13:22:37 +01:00
Vojtech Vilimek
74c68fc89e tmp 2022-12-06 16:32:26 +01:00
Vojtech Vilimek
9a11ec8d83 tmp: compiles 2022-11-29 16:30:20 +01:00
Vojtech Vilimek
6f74f4a663 moving shared parts to snmp_utils 2022-11-22 14:16:09 +01:00
Vojtech Vilimek
ad9833e4f1 tmp: compiles 2022-11-19 23:00:02 +01:00
Vojtech Vilimek
508a420327 fix the Get and GetNext
missing some functionality around GetBulk
2022-11-15 16:29:03 +01:00
Vojtech Vilimek
9a75af4573 tmp: compiles, first tests 2022-11-05 16:29:00 +01:00
Vojtech Vilimek
03ab2a89c0 TMP: compiles and runs 2022-09-30 09:36:09 +02:00
Vojtech Vilimek
8ea2e991fa TMP: work on Get-PDU and GetNext-PDU 2022-09-20 14:28:57 +02:00
Vojtech Vilimek
eb5a749046 TMP new snmp PDUs 2022-09-06 18:04:29 +02:00
Vojtech Vilimek
7961bbb26a TMP: compiles, some pdus working 2022-08-10 17:31:32 +02:00
Vojtech Vilimek
a5bdba428b TMP: code cleanup - remove trailing whitespace 2022-08-02 16:12:09 +02:00
Vojtech Vilimek
e5a88b584e TMP: proto-snmp compiles and connects to master 2022-08-02 16:06:00 +02:00
Vojtech Vilimek
f4dc719f14 Refactor of struct channel and channel_config
Element struct channel_class *channel was renamed to *class in struct channel
and struct channel_config. New pointers were added to structures above
in both directions. This can simplify and speedup the proces of finding
channel (configuration).
2022-08-01 13:03:20 +02:00
Vojtech Vilimek
203c63ad5d Initial commit for new protocol `snmp' 2022-08-01 13:01:49 +02:00
Maria Matejka
08c8484608 Merge commit '94eb0858' into thread-next 2022-07-18 12:33:00 +02:00
Maria Matejka
4b6f5ee870 Merge commit 'a4451535' into thread-next 2022-07-18 11:11:46 +02:00
Maria Matejka
05673b16a8 Merge commit 'c70b3198' into thread-next [lots of conflicts]
There were more conflicts that I'd like to see, most notably in route
export. If a bisect identifies this commit with something related, it
may be simply true that this commit introduces that bug. Let's hope it
doesn't happen.
2022-07-15 14:57:02 +02:00
Maria Matejka
1c2851ecfa Fixed invalid routes handling
The invalid routes were filtered out before they could ever get
exported, yet some of the routines need them available, e.g. for
display or import reload.

Now the invalid routes are properly exported and dropped in channel
export routines instead.
2022-07-14 12:13:18 +02:00
Maria Matejka
68a2c9d4c9 Merge commit '2e5bfeb73ac25e236a24b6c1a88d0f2221ca303f' into thread-next 2022-07-13 14:14:37 +02:00
Maria Matejka
af0d5ec279 Merge commit 'd429bc5c841a8e9d4c81786973edfa56d20a407e' into thread-next 2022-07-13 12:54:20 +02:00
Maria Matejka
5be34f5ab4 Merge commit '7e9cede1fd1878fb4c00e793bccd0ca6c18ad452' into thread-next 2022-07-13 12:02:34 +02:00
Maria Matejka
bc2ce4aaa8 Removing the rte_modify API
For BGP LLGR purposes, there was an API allowing a protocol to directly
modify their stale routes in table before flushing them. This API was
called by the table prune routine which violates the future locking
requirements.

Instead of this, BGP now requests a special route export and reimports
these routes into the table, allowing for asynchronous execution without
locking the table on export.
2022-07-12 14:45:27 +02:00
Maria Matejka
080cbd1219 Route refresh in tables uses a stale counter.
Until now, we were marking routes as REF_STALE and REF_DISCARD to
cleanup old routes after route refresh. This needed a synchronous route
table walk at both beginning and the end of route refresh routine,
marking the routes by the flags.

We avoid these walks by using a stale counter. Every route contains:
  u8 stale_cycle;
Every import hook contains:
  u8 stale_set;
  u8 stale_valid;
  u8 stale_pruned;
  u8 stale_pruning;

In base_state, stale_set == stale_valid == stale_pruned == stale_pruning
and all routes' stale_cycle also have the same value.

The route refresh looks like follows:
+ ----------- + --------- + ----------- + ------------- + ------------ +
|             | stale_set | stale_valid | stale_pruning | stale_pruned |
| Base        |     x     |      x      |        x      |       x      |
| Begin       |    x+1    |      x      |        x      |       x      |
  ... now routes are being inserted with stale_cycle == (x+1)
| End         |    x+1    |     x+1     |        x      |       x      |
  ... now table pruning routine is scheduled
| Prune begin |    x+1    |     x+1     |       x+1     |       x      |
  ... now routes with stale_cycle not between stale_set and stale_valid
      are deleted
| Prune end   |    x+1    |     x+1     |       x+1     |      x+1     |
+ ----------- + --------- + ----------- + ------------- + ------------ +

The pruning routine is asynchronous and may have high latency in
high-load environments. Therefore, multiple route refresh requests may
happen before the pruning routine starts, leading to this situation:

| Prune begin |    x+k    |     x+k     |    x -> x+k   |       x      |
  ... or even
| Prune begin |   x+k+1   |     x+k     |    x -> x+k   |       x      |
  ... if the prune event starts while another route refresh is running.

In such a case, the pruning routine still deletes routes not fitting
between stale_set and and stale_valid, effectively pruning the remnants
of all unpruned route refreshes from before:

| Prune end   |    x+k    |     x+k     |       x+k     |      x+k     |

In extremely rare cases, there may happen too many route refreshes
before any route prune routine finishes. If the difference between
stale_valid and stale_pruned becomes more than 128 when requesting for
another route refresh, the routine walks the table synchronously and
resets all the stale values to a base state, while logging a warning.
2022-07-12 12:22:41 +02:00
Maria Matejka
6b0368cc2c Export tables merged with BGP prefix hash
Until now, if export table was enabled, Nest was storing exactly the
route before rt_notify() was called on it. This was quite sloppy and
spooky and it also wasn't reflecting the changes BGP does before
sending. And as BGP is storing the routes to be sent anyway, we are
simply keeping the already-sent routes in there to better rule out
unneeded reexports.

Some of the route attributes (IGP metric, preference) make no sense in
BGP, therefore these will be probably replaced by something sensible.
Also the nexthop shown in the short output is the BGP nexthop.
2022-07-11 16:07:09 +02:00
Maria Matejka
2e5bfeb73a Merge remote-tracking branch 'origin/master' into backport 2022-07-11 11:08:10 +02:00
Maria Matejka
d429bc5c84 Merge commit 'beb5f78a' into backport 2022-07-11 10:41:17 +02:00