[NETVIRT-681] SFC Classifier tables not created when client, server and SF are in one OVS Created: 17/May/17  Updated: 06/Apr/18  Resolved: 06/Apr/18

Status: Resolved
Project: netvirt
Component/s: General
Affects Version/s: Carbon
Fix Version/s: None

Type: Bug Priority: Medium
Reporter: Manuel Buil Assignee: Unassigned
Resolution: Cannot Reproduce Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified
Environment:

Operating System: All
Platform: All


External issue ID: 8489

 Description   

I am using RC1 of Carbon. When running the topology of all VMs created in the same compute, rsp is created correctly. However, after configuring the classifier, the classification flows are not created and I can see the following in the karaf.log:

2017-05-17 15:13:14,445 | DEBUG | ssifierService-0 | GeniusProvider | 389 - org.opendaylight.netvirt.sfc.classifier-impl - 0.4.0.Carbon | getDpnIdFromInterfaceName: starting (logical interface=ba798066-6cce-487d-9a28-98b2fa51edbb)
2017-05-17 15:13:14,446 | DEBUG | ssifierService-0 | GeniusProvider | 389 - org.opendaylight.netvirt.sfc.classifier-impl - 0.4.0.Carbon | getDpnIdFromInterfaceName: invoking rpc
2017-05-17 15:13:14,447 | DEBUG | ssifierService-0 | GeniusProvider | 389 - org.opendaylight.netvirt.sfc.classifier-impl - 0.4.0.Carbon | getDpnIdFromInterfaceName(GetDpidFromInterfaceInput [_intfName=ba798066-6cce-487d-9a28-98b2fa51edbb, augmentation=[]]) succeeded: RpcResult [successful=true, result=GetDpidFromInterfaceOutput [_dpid=176700523859095, augmentation=[]], errors=[]]
2017-05-17 15:13:14,448 | DEBUG | ssifierService-0 | GeniusProvider | 389 - org.opendaylight.netvirt.sfc.classifier-impl - 0.4.0.Carbon | getIpFromDpnId: invoking rpc
2017-05-17 15:13:14,449 | ERROR | ssifierService-0 | InterfaceManagerRpcService | 344 - org.opendaylight.genius.interfacemanager-impl - 0.2.0.Carbon | Retrieval of endpoint of for dpn 176700523859095 failed due to java.lang.NullPointerException
2017-05-17 15:13:14,449 | ERROR | ssifierService-0 | GeniusProvider | 389 - org.opendaylight.netvirt.sfc.classifier-impl - 0.4.0.Carbon | getIpFromDpnId(GetEndpointIpForDpnInput [_dpid=176700523859095, augmentation=[]]) failed: RpcResult [successful=false, result=null, errors=[]]
2017-05-17 15:13:14,449 | WARN | ssifierService-0 | GeniusProvider | 389 - org.opendaylight.netvirt.sfc.classifier-impl - 0.4.0.Carbon | getIpFromInterfaceName empty ipList for interfaceName [ba798066-6cce-487d-9a28-98b2fa51edbb]



 Comments   
Comment by Manuel Buil [ 22/May/17 ]

Appanretly the problem is that when all nodes are contained in one, there is no need for vxlan interfaces and thus these are not created. This is the output of ovs-vsctl show:

[vagrant@localhost sfc]$ docker exec b74f1d561e89 ovs-vsctl show
76dfddff-4696-42ab-8c98-3d1218dab1ff
Manager "tcp:172.28.128.1:6640"
is_connected: true
Bridge br-int
Controller "tcp:172.28.128.1:6653"
is_connected: true
fail_mode: secure
Port "tap6c388d42-60"
Interface "tap6c388d42-60"
Port "tap35c4edbb-00"
Interface "tap35c4edbb-00"
Port "tap6b01dab3-cd"
Interface "tap6b01dab3-cd"
Port br-int
Interface br-int
type: internal
ovs_version: "2.6.1"

However, the ConfigurationClassifierImpl.getEntries method requests the destinationIp which does not exist:

String destinationIp = sfcProvider.getFirstHopSfInterfaceFromRsp(rsp)
.flatMap(geniusProvider::getIpFromInterfaceName)
.orElse(null);

Which ends up calling GeniusProvider.getIpFromDpnID method which returns null in this call:

RpcResult<GetEndpointIpForDpnOutput> output = interfaceManagerRpcService.getEndpointIpForDpn(input).get();

Because, as said before, the detination IP does not exist.

We should handle this by having another design of the pipelien because right now the destination IP is a required parameter

Generated at Wed Feb 07 20:22:12 UTC 2024 using Jira 8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d.