[SFC-182] RSP selects incorrect SFF locator, for SFF hosting more than one SF Created: 16/Dec/16  Updated: 29/May/18  Resolved: 29/May/18

Status: Verified
Project: sfc
Component/s: General
Affects Version/s: unspecified
Fix Version/s: Oxygen

Type: Bug
Reporter: Swati Deshpande Assignee: Brady Johnson
Resolution: Done 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: 7399

 Description   

If more than one SF is attached to single SFF and SFC is setup with one or more of those SFs, Rendered service Path is setting the same SFF locator for all hops. It seems to choose SFF locator of first SF in the SF dictionary of SFF for all hops.

Example,

Lets say there are 3 SFs, SF1, SF2, SF3 all attached to single SFF, SFF1.
Setup SFC with SF1->SF2-SF3, create SFP (round robin Sched) and RSP.
The RSP shows service-function-forwarder-locator: SFF1-2-dpl for all the hops.

Configuration Details below
--------------------------------

Service-Nodes
----------
{
"service-nodes": {
"service-node": [

{ "name": "Node05-SN-Client", "ip-mgmt-address": "172.16.9.32" }

,

{ "name": "Node06-SN-SF3", "ip-mgmt-address": "172.16.9.53" }

,

{ "name": "Node05-SN-Server", "ip-mgmt-address": "172.16.9.42" }

,

{ "name": "Node06-SN-SF2", "ip-mgmt-address": "172.16.9.43" }

,

{ "name": "Node06-SN-SFF", "ip-mgmt-address": "172.16.9.23" }

,

{ "name": "Node06-SN-SF1", "ip-mgmt-address": "172.16.9.33" }

]
}
}

-----------------

Service Function

{
"service-functions": {
"service-function": [
{
"name": "SF3",
"sf-data-plane-locator": [

{ "name": "SF3-dpl", "ip": "172.16.9.53", "port": 6633, "service-function-forwarder": "Node06-SFF1", "transport": "service-locator:vxlan-gpe" }

],
"nsh-aware": true,
"rest-uri": "http://172.16.9.53:5000",
"ip-mgmt-address": "172.16.9.53",
"type": "nat"
},
{
"name": "SF1",
"sf-data-plane-locator": [

{ "name": "SF1-dpl", "ip": "172.16.9.33", "port": 6633, "service-function-forwarder": "Node06-SFF1", "transport": "service-locator:vxlan-gpe" }

],
"nsh-aware": true,
"rest-uri": "http://172.16.9.33:5000",
"ip-mgmt-address": "172.16.9.33",
"type": "dpi"
},
{
"name": "SF2",
"sf-data-plane-locator": [

{ "name": "SF2-dpl", "ip": "172.16.9.43", "port": 6633, "service-function-forwarder": "Node06-SFF1", "transport": "service-locator:vxlan-gpe" }

],
"nsh-aware": true,
"rest-uri": "http://172.16.9.43:5000",
"ip-mgmt-address": "172.16.9.43",
"type": "firewall"
}
]
}
}

-----------------

service function forwarder

{
"service-function-forwarders": {
"service-function-forwarder": [
{
"name": "Node05-SFF1",
"service-node": "Node05-SN-Client",
"sff-data-plane-locator": [
{
"name": "Node05-SFF1-1-dpl",
"data-plane-locator":

{ "transport": "service-locator:vxlan-gpe", "ip": "172.16.9.32", "port": 6633 }

,
"service-function-forwarder-ovs:ovs-options":

{ "nshc4": "flow", "nshc3": "flow", "nshc2": "flow", "nsi": "flow", "nshc1": "flow", "exts": "gpe", "remote-ip": "flow", "key": "flow", "dst-port": "6633", "nsp": "flow" }

}
],
"service-function-forwarder-ovs:ovs-bridge":

{ "bridge-name": "br-sfc" }

},
{
"name": "Node06-SFF1",
"service-function-dictionary": [
{
"name": "SF2",
"sff-sf-data-plane-locator":

{ "sf-dpl-name": "SF2-dpl", "sff-dpl-name": "Node06-SFF1-2-dpl" }

},
{
"name": "SF3",
"sff-sf-data-plane-locator":

{ "sf-dpl-name": "SF3-dpl", "sff-dpl-name": "Node06-SFF1-3-dpl" }

},
{
"name": "SF1",
"sff-sf-data-plane-locator":

{ "sf-dpl-name": "SF1-dpl", "sff-dpl-name": "Node06-SFF1-1-dpl" }

}
],
"service-node": "Node06-SN-SFF",
"sff-data-plane-locator": [
{
"name": "Node06-SFF1-2-dpl",
"data-plane-locator":

{ "transport": "service-locator:vxlan-gpe", "ip": "172.16.9.23", "port": 6633 }

,
"service-function-forwarder-ovs:ovs-options":

{ "nshc4": "flow", "nshc3": "flow", "nshc2": "flow", "nsi": "flow", "nshc1": "flow", "exts": "gpe", "remote-ip": "flow", "key": "flow", "dst-port": "6633", "nsp": "flow" }

},
{
"name": "Node06-SFF1-3-dpl",
"data-plane-locator":

{ "transport": "service-locator:vxlan-gpe", "ip": "172.16.9.23", "port": 6633 }

,
"service-function-forwarder-ovs:ovs-options":

{ "nshc4": "flow", "nshc3": "flow", "nshc2": "flow", "nsi": "flow", "nshc1": "flow", "exts": "gpe", "remote-ip": "flow", "key": "flow", "dst-port": "6633", "nsp": "flow" }

},
{
"name": "Node06-SFF1-1-dpl",
"data-plane-locator":

{ "transport": "service-locator:vxlan-gpe", "ip": "172.16.9.23", "port": 6633 }

,
"service-function-forwarder-ovs:ovs-options":

{ "nshc4": "flow", "nshc3": "flow", "nshc2": "flow", "nsi": "flow", "nshc1": "flow", "exts": "gpe", "remote-ip": "flow", "key": "flow", "dst-port": "6633", "nsp": "flow" }

}
],
"service-function-forwarder-ovs:ovs-bridge":

{ "bridge-name": "br-sfc" }

},
{
"name": "Node05-SFF2",
"service-node": "Node05-SN-Server",
"sff-data-plane-locator": [
{
"name": "Node05-SFF2-1-dpl",
"data-plane-locator":

{ "transport": "service-locator:vxlan-gpe", "ip": "172.16.9.42", "port": 6633 }

,
"service-function-forwarder-ovs:ovs-options":

{ "nshc4": "flow", "nshc3": "flow", "nshc2": "flow", "nsi": "flow", "nshc1": "flow", "exts": "gpe", "remote-ip": "flow", "key": "flow", "dst-port": "6633", "nsp": "flow" }

}
],
"service-function-forwarder-ovs:ovs-bridge":

{ "bridge-name": "br-sfc" }

}
]
}
}

-----------------

service function chain

{
"service-function-chains": {
"service-function-chain": [
{
"name": "Node06-SFC1",
"symmetric": true,
"sfc-service-function": [

{ "name": "SF1", "type": "dpi" }

,

{ "name": "SF2", "type": "firewall" }

]
},
{
"name": "Node06-SFC2",
"symmetric": true,
"sfc-service-function": [

{ "name": "SF1", "type": "dpi" }

,

{ "name": "SF2", "type": "firewall" }

,

{ "name": "SF3", "type": "nat" }

]
}
]
}
}

-----------

service function path

{
"service-function-paths": {
"service-function-path": [

{ "name": "Node06-SFC1-SFP", "context-metadata": "NSH1", "symmetric": true, "service-chain-name": "Node06-SFC1", "starting-index": 255 }

,

{ "name": "Node06-SFC2-SFP", "context-metadata": "NSH1", "symmetric": true, "service-chain-name": "Node06-SFC2", "starting-index": 255 }

]
}
}

--------------

Rendered Service Path

{
"rendered-service-paths": {
"rendered-service-path": [
{
"name": "RSP-Node06-SFC1",
"service-chain-name": "Node06-SFC1",
"transport-type": "service-locator:vxlan-gpe",
"symmetric-path-id": 8389162,
"starting-index": 255,
"path-id": 554,
"parent-service-function-path": "Node06-SFC1-SFP",
"context-metadata": "NSH1",
"rendered-service-path-hop": [

{ "hop-number": 0, "service-function-forwarder": "Node06-SFF1", "service-function-forwarder-locator": "Node06-SFF1-2-dpl", "service-index": 255, "service-function-name": "SF1" }

,

{ "hop-number": 1, "service-function-forwarder": "Node06-SFF1", "service-function-forwarder-locator": "Node06-SFF1-2-dpl", "service-index": 254, "service-function-name": "SF2" }

]
},
{
"name": "RSP-Node06-SFC2-Reverse",
"service-chain-name": "Node06-SFC2",
"transport-type": "service-locator:vxlan-gpe",
"symmetric-path-id": 590,
"starting-index": 255,
"path-id": 8389198,
"parent-service-function-path": "Node06-SFC2-SFP",
"context-metadata": "NSH1",
"rendered-service-path-hop": [

{ "hop-number": 0, "service-function-forwarder": "Node06-SFF1", "service-function-forwarder-locator": "Node06-SFF1-2-dpl", "service-index": 255, "service-function-name": "SF3" }

,

{ "hop-number": 1, "service-function-forwarder": "Node06-SFF1", "service-function-forwarder-locator": "Node06-SFF1-2-dpl", "service-index": 254, "service-function-name": "SF2" }

,

{ "hop-number": 2, "service-function-forwarder": "Node06-SFF1", "service-function-forwarder-locator": "Node06-SFF1-2-dpl", "service-index": 253, "service-function-name": "SF1" }

]
},
{
"name": "RSP-Node06-SFC2",
"service-chain-name": "Node06-SFC2",
"transport-type": "service-locator:vxlan-gpe",
"symmetric-path-id": 8389198,
"starting-index": 255,
"path-id": 590,
"parent-service-function-path": "Node06-SFC2-SFP",
"context-metadata": "NSH1",
"rendered-service-path-hop": [

{ "hop-number": 0, "service-function-forwarder": "Node06-SFF1", "service-function-forwarder-locator": "Node06-SFF1-2-dpl", "service-index": 255, "service-function-name": "SF1" }

,

{ "hop-number": 1, "service-function-forwarder": "Node06-SFF1", "service-function-forwarder-locator": "Node06-SFF1-2-dpl", "service-index": 254, "service-function-name": "SF2" }

,

{ "hop-number": 2, "service-function-forwarder": "Node06-SFF1", "service-function-forwarder-locator": "Node06-SFF1-2-dpl", "service-index": 253, "service-function-name": "SF3" }

]
},
{
"name": "RSP-Node06-SFC1-Reverse",
"service-chain-name": "Node06-SFC1",
"transport-type": "service-locator:vxlan-gpe",
"symmetric-path-id": 554,
"starting-index": 255,
"path-id": 8389162,
"parent-service-function-path": "Node06-SFC1-SFP",
"context-metadata": "NSH1",
"rendered-service-path-hop": [

{ "hop-number": 0, "service-function-forwarder": "Node06-SFF1", "service-function-forwarder-locator": "Node06-SFF1-2-dpl", "service-index": 255, "service-function-name": "SF2" }

,

{ "hop-number": 1, "service-function-forwarder": "Node06-SFF1", "service-function-forwarder-locator": "Node06-SFF1-2-dpl", "service-index": 254, "service-function-name": "SF1" }

]
}
]
}
}

--------------



 Comments   
Comment by Brady Johnson [ 29/May/18 ]

This is no longer an issue. I tested this with Flourine, and get the following flows for a service chain with 2 SFs on the same SFF. The flows are valid for 2 SFs on one SFF.

 

cookie=0x14, duration=57.653s, table=0, n_packets=0, n_bytes=0, priority=5 actions=goto_table:1
cookie=0x14, duration=57.653s, table=1, n_packets=0, n_bytes=0, priority=300,udp,nw_dst=10.0.0.20,tp_dst=6633 actions=output:0
cookie=0x14, duration=57.653s, table=1, n_packets=0, n_bytes=0, priority=300,udp,in_port=0,tp_dst=6633 actions=LOCAL
cookie=0x14, duration=57.653s, table=1, n_packets=0, n_bytes=0, priority=250,nsp=8388665 actions=goto_table:4
cookie=0x14, duration=57.653s, table=1, n_packets=0, n_bytes=0, priority=250,nsp=57 actions=goto_table:4
cookie=0x14, duration=57.653s, table=1, n_packets=0, n_bytes=0, priority=5 actions=drop
cookie=0x14, duration=57.653s, table=2, n_packets=0, n_bytes=0, priority=5 actions=goto_table:3
cookie=0x14, duration=57.653s, table=3, n_packets=0, n_bytes=0, priority=5 actions=goto_table:4
cookie=0x14, duration=57.653s, table=4, n_packets=0, n_bytes=0, priority=550,nsi=254,nsp=8388665 actions=load:0xa00000a->NXM_NX_TUN_IPV4_DST[],goto_table:10
cookie=0x14, duration=57.653s, table=4, n_packets=0, n_bytes=0, priority=550,nsi=255,nsp=8388665 actions=load:0xa000014->NXM_NX_TUN_IPV4_DST[],goto_table:10
cookie=0x14, duration=57.653s, table=4, n_packets=0, n_bytes=0, priority=550,nsi=254,nsp=57 actions=load:0xa000014->NXM_NX_TUN_IPV4_DST[],goto_table:10
cookie=0x14, duration=57.653s, table=4, n_packets=0, n_bytes=0, priority=550,nsi=255,nsp=57 actions=load:0xa00000a->NXM_NX_TUN_IPV4_DST[],goto_table:10
cookie=0x14, duration=57.653s, table=4, n_packets=0, n_bytes=0, priority=5 actions=goto_table:10
cookie=0xba5eba1100000102, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=660,nsi=253,nsp=8388665,nshc1=0 actions=load:0x4->NXM_NX_TUN_GPE_NP[],IN_PORT
cookie=0xba5eba1100000102, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=660,nsi=253,nsp=57,nshc1=0 actions=load:0x4->NXM_NX_TUN_GPE_NP[],IN_PORT
cookie=0xba5eba1100000101, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=655,nsi=254,nsp=8388665,in_port=3 actions=move:NXM_NX_NSH_MDTYPE[]>NXM_NX_NSH_MDTYPE[],move:NXM_NX_NSH_NP[]>NXM_NX_NSH_NP[],move:NXM_NX_NSH_C1[]>NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]>NXM_NX_NSH_C2[],move:NXM_NX_NSH_C3[]>NXM_NX_NSH_C3[],move:NXM_NX_NSH_C4[]>NXM_NX_NSH_C4[],move:NXM_NX_TUN_ID[0..31]>NXM_NX_TUN_ID[0..31],load:0x4>NXM_NX_TUN_GPE_NP[],IN_PORT
cookie=0xba5eba1100000103, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=655,nsi=253,nsp=8388665,in_port=3 actions=move:NXM_NX_NSH_MDTYPE[]>NXM_NX_NSH_MDTYPE[],move:NXM_NX_NSH_NP[]>NXM_NX_NSH_NP[],move:NXM_NX_NSI[]>NXM_NX_NSI[],move:NXM_NX_NSP[0..23]>NXM_NX_NSP[0..23],move:NXM_NX_NSH_C1[]>NXM_NX_TUN_IPV4_DST[],move:NXM_NX_NSH_C2[]>NXM_NX_TUN_ID[0..31],load:0x4->NXM_NX_TUN_GPE_NP[],IN_PORT
cookie=0xba5eba1100000101, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=655,nsi=255,nsp=8388665,in_port=3 actions=move:NXM_NX_NSH_MDTYPE[]>NXM_NX_NSH_MDTYPE[],move:NXM_NX_NSH_NP[]>NXM_NX_NSH_NP[],move:NXM_NX_NSH_C1[]>NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]>NXM_NX_NSH_C2[],move:NXM_NX_NSH_C3[]>NXM_NX_NSH_C3[],move:NXM_NX_NSH_C4[]>NXM_NX_NSH_C4[],move:NXM_NX_TUN_ID[0..31]>NXM_NX_TUN_ID[0..31],load:0x4>NXM_NX_TUN_GPE_NP[],IN_PORT
cookie=0xba5eba1100000101, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=655,nsi=255,nsp=57,in_port=3 actions=move:NXM_NX_NSH_MDTYPE[]>NXM_NX_NSH_MDTYPE[],move:NXM_NX_NSH_NP[]>NXM_NX_NSH_NP[],move:NXM_NX_NSH_C1[]>NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]>NXM_NX_NSH_C2[],move:NXM_NX_NSH_C3[]>NXM_NX_NSH_C3[],move:NXM_NX_NSH_C4[]>NXM_NX_NSH_C4[],move:NXM_NX_TUN_ID[0..31]>NXM_NX_TUN_ID[0..31],load:0x4>NXM_NX_TUN_GPE_NP[],IN_PORT
cookie=0xba5eba1100000101, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=655,nsi=254,nsp=57,in_port=3 actions=move:NXM_NX_NSH_MDTYPE[]>NXM_NX_NSH_MDTYPE[],move:NXM_NX_NSH_NP[]>NXM_NX_NSH_NP[],move:NXM_NX_NSH_C1[]>NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]>NXM_NX_NSH_C2[],move:NXM_NX_NSH_C3[]>NXM_NX_NSH_C3[],move:NXM_NX_NSH_C4[]>NXM_NX_NSH_C4[],move:NXM_NX_TUN_ID[0..31]>NXM_NX_TUN_ID[0..31],load:0x4>NXM_NX_TUN_GPE_NP[],IN_PORT
cookie=0xba5eba1100000103, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=655,nsi=253,nsp=57,in_port=3 actions=move:NXM_NX_NSH_MDTYPE[]>NXM_NX_NSH_MDTYPE[],move:NXM_NX_NSH_NP[]>NXM_NX_NSH_NP[],move:NXM_NX_NSI[]>NXM_NX_NSI[],move:NXM_NX_NSP[0..23]>NXM_NX_NSP[0..23],move:NXM_NX_NSH_C1[]>NXM_NX_TUN_IPV4_DST[],move:NXM_NX_NSH_C2[]>NXM_NX_TUN_ID[0..31],load:0x4->NXM_NX_TUN_GPE_NP[],IN_PORT
cookie=0xba5eba1100000103, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=650,nsi=253,nsp=8388665 actions=move:NXM_NX_NSH_MDTYPE[]>NXM_NX_NSH_MDTYPE[],move:NXM_NX_NSH_NP[]>NXM_NX_NSH_NP[],move:NXM_NX_NSI[]>NXM_NX_NSI[],move:NXM_NX_NSP[0..23]>NXM_NX_NSP[0..23],move:NXM_NX_NSH_C1[]>NXM_NX_TUN_IPV4_DST[],move:NXM_NX_NSH_C2[]>NXM_NX_TUN_ID[0..31],load:0x4->NXM_NX_TUN_GPE_NP[],output:3
cookie=0xba5eba1100000101, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=650,nsi=254,nsp=8388665 actions=move:NXM_NX_NSH_MDTYPE[]>NXM_NX_NSH_MDTYPE[],move:NXM_NX_NSH_NP[]>NXM_NX_NSH_NP[],move:NXM_NX_NSH_C1[]>NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]>NXM_NX_NSH_C2[],move:NXM_NX_NSH_C3[]>NXM_NX_NSH_C3[],move:NXM_NX_NSH_C4[]>NXM_NX_NSH_C4[],move:NXM_NX_TUN_ID[0..31]>NXM_NX_TUN_ID[0..31],load:0x4>NXM_NX_TUN_GPE_NP[],output:3
cookie=0xba5eba1100000101, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=650,nsi=255,nsp=8388665 actions=move:NXM_NX_NSH_MDTYPE[]>NXM_NX_NSH_MDTYPE[],move:NXM_NX_NSH_NP[]>NXM_NX_NSH_NP[],move:NXM_NX_NSH_C1[]>NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]>NXM_NX_NSH_C2[],move:NXM_NX_NSH_C3[]>NXM_NX_NSH_C3[],move:NXM_NX_NSH_C4[]>NXM_NX_NSH_C4[],move:NXM_NX_TUN_ID[0..31]>NXM_NX_TUN_ID[0..31],load:0x4>NXM_NX_TUN_GPE_NP[],output:3
cookie=0xba5eba1100000101, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=650,nsi=255,nsp=57 actions=move:NXM_NX_NSH_MDTYPE[]>NXM_NX_NSH_MDTYPE[],move:NXM_NX_NSH_NP[]>NXM_NX_NSH_NP[],move:NXM_NX_NSH_C1[]>NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]>NXM_NX_NSH_C2[],move:NXM_NX_NSH_C3[]>NXM_NX_NSH_C3[],move:NXM_NX_NSH_C4[]>NXM_NX_NSH_C4[],move:NXM_NX_TUN_ID[0..31]>NXM_NX_TUN_ID[0..31],load:0x4>NXM_NX_TUN_GPE_NP[],output:3
cookie=0xba5eba1100000103, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=650,nsi=253,nsp=57 actions=move:NXM_NX_NSH_MDTYPE[]>NXM_NX_NSH_MDTYPE[],move:NXM_NX_NSH_NP[]>NXM_NX_NSH_NP[],move:NXM_NX_NSI[]>NXM_NX_NSI[],move:NXM_NX_NSP[0..23]>NXM_NX_NSP[0..23],move:NXM_NX_NSH_C1[]>NXM_NX_TUN_IPV4_DST[],move:NXM_NX_NSH_C2[]>NXM_NX_TUN_ID[0..31],load:0x4->NXM_NX_TUN_GPE_NP[],output:3
cookie=0xba5eba1100000101, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=650,nsi=254,nsp=57 actions=move:NXM_NX_NSH_MDTYPE[]>NXM_NX_NSH_MDTYPE[],move:NXM_NX_NSH_NP[]>NXM_NX_NSH_NP[],move:NXM_NX_NSH_C1[]>NXM_NX_NSH_C1[],move:NXM_NX_NSH_C2[]>NXM_NX_NSH_C2[],move:NXM_NX_NSH_C3[]>NXM_NX_NSH_C3[],move:NXM_NX_NSH_C4[]>NXM_NX_NSH_C4[],move:NXM_NX_TUN_ID[0..31]>NXM_NX_TUN_ID[0..31],load:0x4>NXM_NX_TUN_GPE_NP[],output:3
cookie=0x14, duration=57.653s, table=10, n_packets=0, n_bytes=0, priority=5 actions=drop

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