Skip to content

Add support for checking whether an Entry can be resolved#27

Merged
robshakir merged 61 commits intomainfrom
rib6
Jun 18, 2021
Merged

Add support for checking whether an Entry can be resolved#27
robshakir merged 61 commits intomainfrom
rib6

Conversation

@robshakir
Copy link
Copy Markdown
Member

commit a4f0ea9c04542d608ed05a97a2714692e72090cb
Author: Rob Shakir <robjs@google.com>
Date:   Wed Jun 16 07:49:37 2021 -0700

    Add checking whether candidates can be resolved in gRIBI.
    
      * (M) aft/oc.go
      * (M) aft/update.sh
      * (M) ocrt/oc.go
      * (M) ocrt/update.sh
        - Regenerate ygot bindings with simple unions.
      * (M) rib/rib.go
        - add checking whether a specified candidate RIB can be resolved
          within the current gRIBI RIB. This allows us to check whether
          a particular entry would be installed or not, and detect cases
          like missing NHGs for IPv4 entries.
        - checks to be added to AddXXX functions in a following change,
          along with a pending queue of 'things that were valid but
          cannot be resolved'.
      * (M) rib/rib_test.go
        - Add testing for the resolution checks.

For tests that need to check against whether something could actually be
resolved on the gRIBI server side, we need to check whether the entry can
actually be resolved within the current set of entries on the server. This
change adds this check.

Following this being committed, the flow will change to being:

  • gRIBI server Modify handler calls AddXXXEntry (e.g., AddIPv4Entry)
  • if the entry is not valid - return an error
  • if the entry is valid && the entry cannot be resolved
    • do not merge the candidate rib
    • do not call the post-change hook
    • queue the candidate RIB as a pending entry
  • if the entry is valid && the entry can be resolved
    • merge the candidate RIBs
    • call the post-change hook
    • check whether any pending candidates across the entry are now resolvable
      and add them

robshakir added 30 commits June 8, 2021 14:49
  * (M) aft/oc.go
  * (M) aft/update.sh
    - Update generated code.
  * (M) go.mod
  * (M) go.sum
    - Go mod tidying.
  * (M) rib/rib.go
  * (M) rib/rib_test.go
    - Add IPv4 entry add and delete.
  * (M) go.mod
  * (M) go.sum
    -  Tidy up modules.
  * (M) rib/rib.go
  * (M) rib/rib_test.go
    -  Add support for network instances in the RIB rather than
       a single RIB.
  * (M) client/client.go
    - TODO comment about handling coalescing.
  * (M) rib/rib.go
  * (M) rib/rib_test.go
    - Add support for adding NHG and NHs to the RIB.
  * (M) rib/rib.go
  * (M) rib/rib_test.go
    - Validate any candidate RIB against the OpenConfig schema before
      adding it to the RIB.
  * (M) aft/oc.go
  * (M) aft/update.sh
    - Add delete methods.
  * (M) go.mod
  * (M) go.sum
    - Tidy up modules.
  * (M) rib/rib.go
    - Add support for a simple callback function that is run after
      every update to the RIB.
    - Fix a defect with implicit replace whereby we did not delete the
      RIB entry before doing MergeStructInto meaning that for some
      leaf-lists we ended up appending to the contents of the RIB.
  * (M) rib/rib_test.go
    - Add test cases for the above functionality - including a test
      case demonstrating how gNMI Notifications can be generated.
* Add an initial implementation of a resolved-RIB.

Background -- we want the gRIBI server to be able build both a RIB that
is efficient for it to do gRIBI operations with, as well as a software
emulated 'resolved RIB' / 'FIB' whereby we can say something like "where
will this packet go based on what gRIBI is programmed?". This package
starts this implementation.

  * (M) aft/oc.go
    - Update generated code.
  * (M) go.mod
  * (M) go.sum
    - New dependencies on kentik/patricia
  * (A) ocrt/oc.go
  * (A) ocrt/update.sh
    - Generated routing specific OpenConfig Go structs.
  * (A) ocrt/yang/deviations.yang
    - Deviations to reduce the size of the generated oc.go.
  * (M) rib/rib.go
    - Fix handling of implicit replace.
  * (A) sysrib/sysrib.go
  * (A) sysrib/sysrib_test.go
    -  Initial system RIB implementation. This package currently parses
        OpenConfig to build a list of all of the connected routes that
        are on the system.

* Address review comments.
  * (A) gnmit/gnmit.go
  * (A) gnmit/gnmit_test.go
    - Wrap the openconfig/gnmi libraries to create a single-device
      cache that can be used to send gNMI updates to from the overall
      fake device.
  * (M) go.mod
  * (M) go.sum
    - move off ygot development branch.
  * (M) rib/rib.go
    -  Adopt change to protomap API in ygot.
  * (M) server/server.go
    -  Add goroutines to server Modify handler to allow concurrent
       processing.
  * (M) gnmit/gnmit_test.go
    - deflake test by:
      - checking for presence of correct leaves before syncresponse.
      - ignoring update order.
  * (M) fluent/fluent.go
  * (M) fluent/fluent_test.go
    - Add support for generating basic IPv4Entry types in the
      fluent API.
    - Ensure coverage of the builder functions in the fluent
      library.
  * (M) client/client.go
    - Fix duplicate queueing for AFTOperations during send queueing.
    - Handle received operations from the server by removing them
      from the pending queue.
  * (M) fluent/fluent.go
    - Simplfy mapping to canonical reason codes.
  * (M) fluent/fluent_test.go
    - Add an integration test for a simple IPv4 entry.
  * (M) rib/rib.go
  * (M) rib/rib_test.go
    - Define a type for the RIB function hook.
    - add locking across network instances.
    - change ribHolder to be publicly accessible.
  * (M) server/server.go
    - Define a const for the default network instance name.
    - Add handling for specifying a RIBHook when initialising the
      server.
    - Add handling for doing an IPv4 add operation.
  * (M) client/client.go
    - Move to defaulting that TLS is on in gRIBI to match
      gNMI. In the future this could be dialoption controlled.
  * (M) cmd/rtr/main.go
    - Add a simple binary that allows a gnmi+gribi server to
      be created.
  * (M) compliance/compliance.go
  * (M) compliance/compliance_test.go
    - Adopt TLS in compliance tests.
    - Add basic IPv4Entry test
  * (A) demo/ipv4/ipv4.go
  * (A) demo/ipv4/ipv4_test.go
    - Allow IPv4Entry compliance test to be run against the rtr
      binary.
  * (M) device/device.go
  * (M) device/device_test.go
    - Add TLS credential options.
    - Add a device package test.
  * (M) fluent/fluent_test.go
    - Adopt TLS.
  * (M) gnmit/gnmit.go
    - Add TLS for gNMI server.
  * (M) server/server.go
    - Clean up clients that have gone away. :-)
  * (A) testcommon/testcommon.go
  * (A) testcommon/testdata/server.cert
  * (A) testcommon/testdata/server.key
    - Keys for all test packages and an accessor function.
#
#  * (M) device/device.go
#    -
#  * (M) sysrib/sysrib.go
#    -
WIP
  * (M) .github/workflows/go.yml
    - Exclude files from race testing.
  * (M) aft/oc.go
  * (M) aft/update.sh
  * (M) ocrt/oc.go
  * (M) ocrt/update.sh
    - Regenerate ygot bindings with simple unions.
  * (M) rib/rib.go
    - add checking whether a specified candidate RIB can be resolved
      within the current gRIBI RIB. This allows us to check whether
      a particular entry would be installed or not, and detect cases
      like missing NHGs for IPv4 entries.
    - checks to be added to AddXXX functions in a following change,
      along with a pending queue of 'things that were valid but
      cannot be resolved'.
  * (M) rib/rib_test.go
    - Add testing for the resolution checks.
@robshakir robshakir changed the base branch from main to rib5 June 16, 2021 14:58
@robshakir robshakir requested a review from sthesayi June 17, 2021 05:07
Base automatically changed from rib5 to main June 18, 2021 00:54
@robshakir robshakir merged commit 375a7fe into main Jun 18, 2021
@robshakir robshakir deleted the rib6 branch June 18, 2021 01:04
@robshakir robshakir restored the rib6 branch June 18, 2021 01:05
@robshakir robshakir deleted the rib6 branch June 22, 2021 13:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants