59 Commits

Author SHA1 Message Date
Carmelo Cascone
7044efd07e More bugfixes in P4Runtime subsystem
- NPE when removing agent listeners
- Don't block netcfg event dispatch thread on GDP
- Avoid unnecessary warn logs during disconnection in GDP

Change-Id: I612f7f7914579eea9ba393e952377a3933d92e8d
2018-07-06 13:01:36 +02:00
Carmelo Cascone
158b8c4f6b More improvements and bugfixes in P4Runtime subsystem
Most notably, we fix a bug in which some nodes were not able to find
pipeconf-specific behaviors for a given device. The problem is not
completelly solved but it's mitigated.

There's a race condition caused by the fact that the GDP updates the cfg
with the merged driver name before advertising the device to the core.
Some nodes might receive the cfg update after the device has been
advertised. We mitigate the problem by performing the pipeline deploy
(slow operation) after the cfg update, giving more time for nodes
to catch up. Perhaps we should listen for cfg update events before
advertising the device to the core?

Also:
- NPE when getting P4Runtime client
- Detect if a base driver is already merged in pipeconf manager
- Longer timeouts in P4Runtime driver and protocol (for slow networks)
- Configurable timeout in P4Runtime driver and GDP
- NPE when adding/removing device agent listeners in P4Rtunime handshaker
- Various exceptions due to race conditions in GDP when disconnecting
devices (by serializing disconnect tasks per device)
- NPE when cancelling polling tasks in GDP
- Refactored PipeconfService to distinguish between driver merge,
pipeconf map update, and cfg update (now performed in the GDP)
- Fixed PipeconfManagerTest, not testing driver behaviours
- Use Guava striped locks when possible (more memory-efficient than maps,
and with strict atomicity guarantees w.r.t. to caches).

Change-Id: I30f3887541ba0fd44439a86885e9821ac565b64c
2018-07-06 08:13:44 +00:00
Yi Tseng
f325a60933 [ONOS-7435] Add configurable properties in P4RuntimeGroupProgrammable
Change-Id: Ic2d847f4962bef8d6b91732e590764cdef5c2e30
2018-07-02 10:45:22 +00:00
Carmelo Cascone
e5b2872eb6 Improve scalability of P4Runtime subsystem
The P4Runtime client was hanging (deadlock) on a master arbitration
request. As such, all other requests (e.g. table write) were waiting
for the client's request lock to become available.

Apart from fixing those deadlocks, this patch brings a number of
improvements that all together allow to run networks of 100+ P4Runtime
devices on a single ONOS instance (before only ~20 devices)

Includes:
- Asynchrounous mastership handling in DevicHandshaker (as defined in
the P4Runtime and OpenFlow spec)
- Refactored arbitration handling in the P4RuntimeClient
to be consistent with the P4Runtime spec
- Report suspect deadlocks in P4RuntimeClientImpl
- Exploit write errors in P4RuntimeClient to quickly report
channel/mastership errors to upper layers
- Complete all futures with deadlines in P4Runtime driver
- Dump all tables in one request
- Re-purposed ChannelEvent to DeviceAgentEvent to carry also mastership
response events
- Fixed IntelliJ warnings
- Various code and log clean-ups

Change-Id: I9376793a9fe69d8eddf7e8ac2ef0ee4c14fbd198
2018-06-29 13:59:27 +00:00
Esin Karaman
971fb7fd1f ONOS-7251 - Initial implementation of fabric.p4 L2 broadcast feature.
Thrift client cherry-picked from the commit dd5792ac9ee38a702c3128a34224852b5c284687

Change-Id: I989f2b2074485a892195889a7c976b518510da88
2018-06-28 13:34:47 +00:00
Carmelo Cascone
44448a52cc Allow re-creating clients for the same P4Runtime addr-port
Change-Id: Ib3de10d047f52dd28511e71385773d4b4a9ad74f
2018-06-26 12:23:29 +00:00
Carmelo Cascone
5bdb651370 Disabling P4Runtime meters until ONOS-7720 is fixed
Change-Id: Ia0f9878e5a61252016f6b6d88f634f91993f37d2
2018-06-20 20:44:56 +00:00
Yuta HIGUCHI
08392f45ec Fix gRPC dependency
Change-Id: Iddebec60218b555d8ffe39fcabd3daad0b776218
2018-06-09 07:15:37 +00:00
Andrea Campanella
1e5734480f [ONOS-7584] Adding Capability of re-connecting to a P4Runtime Device.
Also addresses ONOS-7359

Change-Id: I47ec4ed429af82feb225ab5ac180b94c91366a53
2018-06-08 02:14:33 +00:00
Yi Tseng
8d355132da [ONOS-7605] Unable to modify groups on BMV2
Change-Id: I797366ac152dccac75f8ed82b62abe6e5da6dd3e
2018-05-22 18:57:19 +00:00
Kevin Chuang
c267df2051 Initialize behaviour attributes before perform meter operation
Change-Id: I51dff2db29762a7d475acea95d1bb1a0e67661c8
2018-05-03 18:49:46 +00:00
Ray Milkey
bca9049101 Starting snapshot 1.14.0-SNAPSHOT
Change-Id: I97bab4e31d2b701f015289eae29d0c58a4937685
2018-04-13 12:47:31 -07:00
Carmelo Cascone
255125d9fc No need to map table counters in PI pipeline interpreter
This is related to ONOS-7595. In a recent P4Runtime update, it has been
made explicit that tables can support at most 1 direct counter. Hence,
the pipeline interpreter no longer needs to provide a mapping between a
table and one of potentially many counters. If needed, such mapping can
be derived from the pipeline model (i.e. the p4info)

Change-Id: Ibdece52f35a4d187ab9dbeb90f5527b6285e9788
2018-04-11 21:24:48 +00:00
Carmelo Cascone
81929aa0cf Bumped supported commit of P4Runtime and BMv2
Includes fixes for:
- ONOS-7593: Support for indirect resource Index type
- ONOS-7595: Removed ID from direct resources
- P4Runtime requires unset bits to be 0 in ternary field matches
- Incorrect parsing of flow rule byte counters
- Full entity names in P4Info with top-level control block (fixed only
	for basic.p4, other programs need to be re-compiled and PI IDs in
	respective pipeconf changed)

Change-Id: Ia19aa949c02e363a550e692915c6d6516a2d13d7
2018-04-11 19:04:45 +00:00
Frank Wang
d7e3b4bc9d [ONOS-7051] Support for P4Runtime meters
Change-Id: Id71374af65aeb84b71636b4ec230dc6001a77a8b
2018-04-04 00:35:08 +00:00
Thomas Vachuska
a10137c0fc Fixing residual ON.Lab references.
Change-Id: Ic54a281ce67e49236c7aeb536729d3900dd9433d
2018-04-04 00:02:22 +00:00
Carmelo Cascone
3da671ac2e Driver properties for P4RuntimeFlowRuleProgrammable
Change-Id: I7f9415742543d6989dbe9b319e4a8d0eb5d25cd3
2018-04-03 02:12:32 +00:00
Yuta HIGUCHI
165afdd619 pom fix around gNMI
Change-Id: I6cd5190e7a9daa3d9050893d7b6195a01e549090
2018-03-06 20:28:45 -08:00
Yi Tseng
76737cf5c6 [ONOS-7435] add "ignoreDeviceWhenGet" property to
P4RuntimeGroupProgrammable

Change-Id: I272e9fdd6d97117596c1923640f400955f4b34fe
2018-02-01 02:39:30 +00:00
Ray Milkey
74e5913ec3 Sonar suggestions - fixes to potential null pointer dereferences
Change-Id: I4e350a9d72a9322971d5d4f831f1bdf167986b87
2018-01-18 19:01:54 +00:00
Manjunath Vanaraj
59ad65730a [ONOS-7334] Using Cache Loader to remove stale entries in p4runtime
Change-Id: Ieead6e199faf23f5fa316516adab659d3e192950
2018-01-13 02:05:59 +00:00
Frank Wang
222262fc50 bug fixes: clean data in p4runtime mirror while deactivating p4runtime driver
Change-Id: Ia60ea78623da9c4a3813780405433f621f195a1f
2017-12-20 21:56:33 +00:00
Carmelo Cascone
b1936bd93f Bumped version of gRPC to 1.3.1
Change-Id: I7798476bd443a796e0e6a6e149ab8f66435ba4fa
2017-12-13 03:24:50 +00:00
Carmelo Cascone
e75b794aa4 ONOS-7050 Refactored P4Runtime GP to use distributed stores
Change-Id: I155bd0d848bfad2a198d220fcb35ab2ad2daa56a
2017-11-30 09:43:35 -08:00
Carmelo Cascone
6a0b5a3c95 ONOS-7050 Refactored P4Runtime FRP to use distributed stores
It uses the PI translation store and a newly introduced P4Runtime device
mirror.

Change-Id: Id2031af5e9bbdc8be4ec6967b867f97d35d54ab0
2017-11-30 17:42:04 +00:00
Carmelo Cascone
326ad2dd29 ONOS-7050 Refactored PI translation service and store
The translation store is now able to maintain mappings between
translated entities and specific instances of a PI entry in the network
(i.e. applied to a device).

The translation service has been refactored to allow users to
learn and forget translated entities.

The refactoring of the P4Runtime driver using this service will be
submitted separatelly.

Change-Id: Iaafd87d90232514853ca0dea0115dbae4f6e7886
2017-11-30 09:40:40 -08:00
Andrea Campanella
14e196dbcd [ONOS-6810] Implement Mastership handling in general DeviceProvider
Change-Id: I14b706d364cf5124da248230fbcda65d0bd284ce
2017-11-29 10:14:31 +01:00
Carmelo Cascone
1a7e4f9b9a ONOS-7050 First stab at PI translation store
Change-Id: I7f48802b1f5d70fbe3e6cead2800855de18b9207
2017-11-23 13:38:21 +00:00
Yi Tseng
63a82df506 Temporary disable pulling entries from p4 target before bmv2/PI fixed
Currently bmv2 has a bug while we pulling flows from switch
The switch might crash after we push about 20 flows

Change-Id: Ib4e15ff9256b339eee40595eb438e28a0ce17d8a
2017-11-21 00:25:23 +00:00
Carmelo Cascone
39c28ca503 Moved service PI classes/interfaces to appropriate package
Change-Id: I44a4aba848fd758a78a28eb484b7f579e3f22d08
2017-11-16 18:57:38 +00:00
Carmelo Cascone
03f343d9cd Clarify and clean up some PiPipelineInterpreter usages
Change-Id: I3f48141e72d552259109aba20a6b34a93d94735a
2017-11-16 18:40:16 +00:00
Carmelo Cascone
87892e25d1 ONOS-7066 ONOS-7067 PI abstractions refactoring and P4Info model parser
Includes changes previously reviewed in #15607, #15877, and #15955.

Change-Id: Ie2ff62e415f2099832ebfe05961a879b7b188fc3
2017-11-13 16:15:17 -08:00
Yi Tseng
3e7f145b90 [ONOS-7143] Add arbitration update support by P4RuntimeClient
Change-Id: I671275576018d50447f969166a7b42a28dd93b1d
2017-11-03 23:13:29 +00:00
Carmelo Cascone
d61fdb3b89 Added P4Runtime-based Barefoot Tofino driver
Change-Id: I09ba8dd4468fa5a792ca481921e8a51dad49702e
2017-10-31 05:41:30 +00:00
Carmelo Cascone
ca94bcf5ea ONOS-7058 Refactored default pipeconfs in new pipelines directory
- Minimal refactoring of P4 programs
- Removed symlinks to BMv2 JSON/P4Info
- Bumped p4c commit (which fixes known parser bug)
- Renamed "default" pipeconf to "basic" (ONOS-6818)

Change-Id: I319f8b142ab22dba9b15457e28cd62d17f78a423
2017-10-30 16:53:37 +00:00
Carmelo Cascone
2b05752370 Allow for arbitrary counter IDs in DefaultP4PortStatisticsDiscovery
Change-Id: Ia840848506c362229eb0fcba9270a78eca1cb782
2017-10-04 22:33:39 +00:00
Ray Milkey
f0c47617e8 Remove deprecated deserialize() mthods from packet classes
Change-Id: I4e52ab368390d30f5f5f24d443a5021916d0c6a3
2017-10-03 18:03:33 +00:00
Carmelo Cascone
cb0a49c993 ONOS-7078 Fixed inconsistencies when encoding/decoding P4Runtime msgs
Now P4InfoBrowser permits looking up entities by name only, not alias.
Applications should use names as defined in the P4Info when
creating PI IDs (e.g. PiCounterId). However, to avoid breaking support
with BMv2-based pipeline models, when referring to header fields in
tables, i.e. match fields, application should drop any scope identifier
from field names, e.g. "hdr.ethernet.src_addr" should be referred by
applications as "ethernet.src_addr". Such inconsistency will be fixed
with ONOS-7066.

Change-Id: I4d6dceadd233a293b845dba84e62a49680ac930b
2017-10-03 16:40:27 +02:00
Carmelo Cascone
87b9b398fa Various improvements to PI group handling
- Moved group translation logic to core service
- Removed dependency on KRYO
- Fixed bug where tratments with PI instructions where not supported if
	an interpreter was present
- Fixed bug where action profile name was not found during protobuf
	encoding (always perform P4Info lookup by name and alias)
- Improved reading of members by issuing one big request for all
	groups

Change-Id: Ifcf8380b09293e70be15cf4999bd2845caf5d01e
2017-10-03 12:41:46 +00:00
Yi Tseng
82512da397 [ONOS-6935] ActionProfile supports in P4RuntimeClient
Change-Id: I9f0ac307985c03b7ed93e14e41ba468c481a4e4f
2017-09-28 01:45:23 +08:00
Yi Tseng
a87b40c468 [ONOS-6964][ONOS-6966] Add pipeconf codec and pipeconf view
Change-Id: Ie60a5451bcc24a27ede655c8230d82998ea4f3be
2017-09-20 22:54:28 +00:00
Carmelo Cascone
f2a5ea6a87 Fixed bug in P4_16 programs that was making bmv2 crash
Change-Id: Ia5057b3080e55610605908cd36b399db6c50c545
2017-09-15 00:00:57 +00:00
Carmelo Cascone
7f75be413e ONOS-7001 Support for direct counters
Currently Bmv2 returns UNKNOWN error when reading direct counters.

Change-Id: I834d7b5a8627181c6888500545e1bdbfe9af8dc1
2017-09-13 08:28:38 +00:00
Carmelo Cascone
fe99be9df0 Workaround to BMv2 bug when reading ECMP entries
Change-Id: I23e5c0af04735c8c79a575d076bc1793d57a69f4
2017-09-12 11:32:05 +00:00
Carmelo Cascone
eb01812052 Updated P4_16 sample programs to reflect HW testbed
Change-Id: I9d76c9bc7632760cd9af1a3a431856291903eaf9
2017-09-06 16:27:06 +00:00
Carmelo Cascone
ef826f9c7f Fixed wiring problem with BMv2/P4Runtime driver
Change-Id: I0aac2598603618cc47ed325b3177df262d9fc359
2017-09-06 07:00:05 +00:00
Carmelo Cascone
b045ddce4a Implemented support for P4Runtime counter read
And PortStatisticsDiscovery behaviour for default.p4 that uses it

Change-Id: Iadf40eb322987ef74239120e01acb4bece712aef
2017-09-01 15:11:50 +00:00
Carmelo Cascone
e3a7c749cf Abstract implementation of a behaviour for P4Runtime
Implements commonality of all other behaviours. Also, simplified
the implementation of all other P4Runtime behaviours by re-using that.

Change-Id: Ibb25bdd1e0d1c6e8863341df87fa83d4a782b8d9
2017-09-01 15:11:07 +00:00
Carmelo Cascone
a62ac3da2a Reusable implementation of default P4 interpreter
That can be shared among many targets running a program equivalent to
default.p4.

Change-Id: Ic13fc4e416f4ad77f71fbd3202277aac9088b3b1
2017-08-31 18:23:24 +00:00
Carmelo Cascone
f423bec0b3 Fixed internal device ID in P4Runtime
Data type for the P4Runtime server-specific device ID is uint_64.
We were using int to store it in ONOS.

Change-Id: Ia4624cfc453ccf6b00a690eb9e4e4ad14a7881ec
2017-08-30 08:17:11 +00:00