<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:38:44 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>OpenDaylight JIRA</title>
    <link>https://jira.opendaylight.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>8.20.10</version>
        <build-number>820010</build-number>
        <build-date>22-06-2022</build-date>
    </build-info>


<item>
            <title>[SFC-141] Beryllium SFCOFL2 Tutorial - Error in SfcL2RspProcessor (Invalid range)</title>
                <link>https://jira.opendaylight.org/browse/SFC-141</link>
                <project id="10167" key="SFC">sfc</project>
                    <description>&lt;p&gt;Hello everyone!&lt;/p&gt;

&lt;p&gt;I &apos;m trying to deploy the *&lt;b&gt;SFCOFL2 Tutorial&lt;/b&gt;* which is placed in the user-guide of berrylium.&lt;/p&gt;

&lt;p&gt;I have made it with Lithium odl and I could take the correct flows using these commands on mininet VM:&lt;/p&gt;

&lt;p&gt;sudo ovs-ofctl -O OpenFlow13 dump-flows s2&lt;br/&gt;
sudo ovs-ofctl -O OpenFlow13 dump-flows s3&lt;/p&gt;

&lt;p&gt;Now, I &apos;m using the stable/beryllium branch of sfc project.&lt;/p&gt;

&lt;p&gt;I &apos;m creating the same topology in the mininet VM:&lt;br/&gt;
*&lt;b&gt;sudo mn --topo linear,4 --mac --controller remote,ip=&amp;lt;ip&amp;gt;,port=&amp;lt;port&amp;gt; --switch ovsk,protocols=OpenFlow13&lt;/b&gt;*&lt;/p&gt;

&lt;p&gt;I have fixed my json data to create correctly the SFFs with their related SFs DPL and I &apos;m seeing them to the SFC UI.&lt;/p&gt;

&lt;p&gt;The problem is when I create the RSP and the random path-id is bigger than 63!! &lt;/p&gt;

&lt;p&gt;If randomly the path-id is for example 40 the flows are created succesfuly in the s2 and s3 bridges, but if the path-id is 174 or something bigger than 63 the following exception is appeared:&lt;/p&gt;

&lt;p&gt;2016-03-22 16:43:06,454 | ERROR | -dispatcher-1907 | SfcL2RspProcessor                | 333 - org.opendaylight.sfc.ofl2 - 0.2.1.SNAPSHOT | RuntimeException in processRenderedServicePath: &lt;br/&gt;
java.lang.IllegalArgumentException: Invalid range: 174, expected: [&lt;span class=&quot;error&quot;&gt;&amp;#91;0\u202563&amp;#93;&lt;/span&gt;].&lt;br/&gt;
	at org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp.check_valueRange(Dscp.java:25)&lt;span class=&quot;error&quot;&gt;&amp;#91;125:org.opendaylight.mdsal.model.ietf-inet-types:2010.9.24.8_1-SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Dscp.&amp;lt;init&amp;gt;(Dscp.java:31)&lt;span class=&quot;error&quot;&gt;&amp;#91;125:org.opendaylight.mdsal.model.ietf-inet-types:2010.9.24.8_1-SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.sfc.util.openflow.SfcOpenflowUtils.addMatchDscp(SfcOpenflowUtils.java:341)&lt;span class=&quot;error&quot;&gt;&amp;#91;320:org.opendaylight.sfc.openflow-utils:0.2.1.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.sfc.l2renderer.openflow.SfcL2FlowProgrammerOFimpl.configurePathMapperSfFlow(SfcL2FlowProgrammerOFimpl.java:686)&lt;span class=&quot;error&quot;&gt;&amp;#91;333:org.opendaylight.sfc.ofl2:0.2.1.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.sfc.l2renderer.openflow.SfcL2FlowProgrammerOFimpl.configureVlanPathMapperFlow(SfcL2FlowProgrammerOFimpl.java:669)&lt;span class=&quot;error&quot;&gt;&amp;#91;333:org.opendaylight.sfc.ofl2:0.2.1.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.sfc.l2renderer.SfcRspProcessorMpls.configureSfPathMapperFlow(SfcRspProcessorMpls.java:107)&lt;span class=&quot;error&quot;&gt;&amp;#91;333:org.opendaylight.sfc.ofl2:0.2.1.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.sfc.l2renderer.SfcL2RspProcessor.configurePathMapperFlows(SfcL2RspProcessor.java:258)&lt;span class=&quot;error&quot;&gt;&amp;#91;333:org.opendaylight.sfc.ofl2:0.2.1.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.sfc.l2renderer.SfcL2RspProcessor.processRenderedServicePath(SfcL2RspProcessor.java:105)&lt;span class=&quot;error&quot;&gt;&amp;#91;333:org.opendaylight.sfc.ofl2:0.2.1.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.sfc.l2renderer.SfcL2RspDataListener.onDataChanged(SfcL2RspDataListener.java:62)&lt;span class=&quot;error&quot;&gt;&amp;#91;333:org.opendaylight.sfc.ofl2:0.2.1.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker$TranslatingDataChangeInvoker.onDataChanged(AbstractForwardedDataBroker.java:143)&lt;span class=&quot;error&quot;&gt;&amp;#91;173:org.opendaylight.controller.sal-binding-broker-impl:1.3.1.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.cluster.datastore.DataChangeListener.dataChanged(DataChangeListener.java:66)&lt;span class=&quot;error&quot;&gt;&amp;#91;198:org.opendaylight.controller.sal-distributed-datastore:1.3.1.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.cluster.datastore.DataChangeListener.handleReceive(DataChangeListener.java:39)&lt;span class=&quot;error&quot;&gt;&amp;#91;198:org.opendaylight.controller.sal-distributed-datastore:1.3.1.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.cluster.common.actor.AbstractUntypedActor.onReceive(AbstractUntypedActor.java:34)&lt;span class=&quot;error&quot;&gt;&amp;#91;194:org.opendaylight.controller.sal-clustering-commons:1.3.1.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:167)&lt;span class=&quot;error&quot;&gt;&amp;#91;183:com.typesafe.akka.actor:2.3.14&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at akka.actor.Actor$class.aroundReceive(Actor.scala:467)&lt;span class=&quot;error&quot;&gt;&amp;#91;183:com.typesafe.akka.actor:2.3.14&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:97)&lt;span class=&quot;error&quot;&gt;&amp;#91;183:com.typesafe.akka.actor:2.3.14&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)&lt;span class=&quot;error&quot;&gt;&amp;#91;183:com.typesafe.akka.actor:2.3.14&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at akka.actor.ActorCell.invoke(ActorCell.scala:487)&lt;span class=&quot;error&quot;&gt;&amp;#91;183:com.typesafe.akka.actor:2.3.14&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238)&lt;span class=&quot;error&quot;&gt;&amp;#91;183:com.typesafe.akka.actor:2.3.14&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at akka.dispatch.Mailbox.run(Mailbox.scala:220)&lt;span class=&quot;error&quot;&gt;&amp;#91;183:com.typesafe.akka.actor:2.3.14&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397)&lt;span class=&quot;error&quot;&gt;&amp;#91;183:com.typesafe.akka.actor:2.3.14&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)&lt;span class=&quot;error&quot;&gt;&amp;#91;180:org.scala-lang.scala-library:2.11.7.v20150622-112736-1fbce4612c&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)&lt;span class=&quot;error&quot;&gt;&amp;#91;180:org.scala-lang.scala-library:2.11.7.v20150622-112736-1fbce4612c&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)&lt;span class=&quot;error&quot;&gt;&amp;#91;180:org.scala-lang.scala-library:2.11.7.v20150622-112736-1fbce4612c&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)&lt;span class=&quot;error&quot;&gt;&amp;#91;180:org.scala-lang.scala-library:2.11.7.v20150622-112736-1fbce4612c&amp;#93;&lt;/span&gt;&lt;/p&gt;</description>
                <environment>&lt;p&gt;Operating System: Linux&lt;br/&gt;
Platform: PC&lt;/p&gt;</environment>
        <key id="24167">SFC-141</key>
            <summary>Beryllium SFCOFL2 Tutorial - Error in SfcL2RspProcessor (Invalid range)</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</type>
                                                <status id="5" iconUrl="https://jira.opendaylight.org/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10001">Won&apos;t Do</resolution>
                                        <assignee username="jesus.javier.arauz@ericsson.com">Javier Arauz</assignee>
                                    <reporter username="chrisborovas@gmail.com">Chris Borovas</reporter>
                        <labels>
                    </labels>
                <created>Tue, 22 Mar 2016 15:27:05 +0000</created>
                <updated>Thu, 19 Oct 2017 16:58:57 +0000</updated>
                            <resolved>Mon, 6 Jun 2016 13:55:45 +0000</resolved>
                                    <version>unspecified</version>
                                                    <component>General</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>3</watches>
                                                                                                                <comments>
                            <comment id="46650" author="suvitha.balu@tcs.com" created="Thu, 26 May 2016 05:38:07 +0000"  >&lt;p&gt;The Exception expected when we pass the value more than 63. Please fine the below link for ietf.inet.types std for DSCP value range.&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;https://github.com/YangModels/yang/blob/master/standard/ietf/RFC/ietf-inet-types@2010-09-24.yang&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/YangModels/yang/blob/master/standard/ietf/RFC/ietf-inet-types@2010-09-24.yang&lt;/a&gt; &lt;/p&gt;

&lt;p&gt; typedef dscp {&lt;br/&gt;
    type uint8 &lt;/p&gt;
{
      range &quot;0..63&quot;;
    }
&lt;p&gt;    description&lt;br/&gt;
     &quot;The dscp type represents a Differentiated Services Code-Point&lt;br/&gt;
      that may be used for marking packets in a traffic stream.&lt;br/&gt;
      In the value set and its semantics, this type is equivalent&lt;br/&gt;
      to the Dscp textual convention of the SMIv2.&quot;;&lt;br/&gt;
    reference&lt;br/&gt;
     &quot;RFC 3289: Management Information Base for the Differentiated&lt;br/&gt;
                Services Architecture&lt;br/&gt;
      RFC 2474: Definition of the Differentiated Services Field&lt;br/&gt;
                (DS Field) in the IPv4 and IPv6 Headers&lt;br/&gt;
      RFC 2780: IANA Allocation Guidelines For Values In&lt;br/&gt;
                the Internet Protocol and Related Headers&quot;;&lt;br/&gt;
  }&lt;/p&gt;</comment>
                            <comment id="46651" author="chrisborovas@gmail.com" created="Thu, 26 May 2016 06:18:24 +0000"  >&lt;p&gt;Hello again! Thank you Suvitha Balu for your notice!&lt;/p&gt;

&lt;p&gt;That means 2 things:&lt;/p&gt;

&lt;p&gt;First of all, the Service Function Chains that are created via SFC UI take ids between 0&amp;lt;id&amp;lt;=63 &lt;/p&gt;

&lt;p&gt;Secondly, we cannot have more than 63 Service Function Chains in our deployment&lt;/p&gt;</comment>
                            <comment id="46652" author="suvitha.balu@tcs.com" created="Thu, 26 May 2016 06:29:16 +0000"  >&lt;p&gt;As per the standard yes .&lt;br/&gt;
&lt;a href=&quot;https://github.com/YangModels/yang/blob/master/standard/ietf/RFC/ietf-inet-types@2010-09-24.yang&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://github.com/YangModels/yang/blob/master/standard/ietf/RFC/ietf-inet-types@2010-09-24.yang&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;We can double confirm by checking with SFC project lead Brady Johnson.&lt;/p&gt;

&lt;p&gt;I have added him in cc list, so lets wait for him comments.&lt;/p&gt;</comment>
                            <comment id="46653" author="jesus.javier.arauz@ericsson.com" created="Fri, 27 May 2016 09:59:23 +0000"  >&lt;p&gt;@Chris, can you point me to the resource describing the demo you were running? I0ve checked ODL user&apos;s guide (&lt;a href=&quot;https://www.opendaylight.org/sites/opendaylight/files/bk-user-guide.pdf&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://www.opendaylight.org/sites/opendaylight/files/bk-user-guide.pdf&lt;/a&gt;) but found no references to a sfcofl2 demo in there...&lt;/p&gt;</comment>
                            <comment id="46654" author="jesus.javier.arauz@ericsson.com" created="Mon, 30 May 2016 10:43:35 +0000"  >&lt;p&gt;The RSP path-id value is randomly generated if not provided in the SFP the RSP is generated from, check org.opendaylight.sfc.provider.api.SfcProviderRenderedPathAPI.createRenderedServicePathEntry():&lt;/p&gt;

&lt;p&gt;444    if (serviceFunctionPath.getPathId() == null) &lt;/p&gt;
{
445        pathId = SfcServicePathId.check_and_allocate_pathid();
446    }
&lt;p&gt; else &lt;/p&gt;
{
447        pathId = SfcServicePathId.check_and_allocate_pathid(serviceFunctionPath.getPathId());
448    }

&lt;p&gt;Later, when programming the OF switches using VLAN DPLs, the path-id is squeezed into the (shorter) DSCP field match of OF rules, check org.opendaylight.sfc.l2renderer.openflow.SfcL2FlowProgrammerOFimpl.configurePathMapperSfFlow():&lt;/p&gt;

&lt;p&gt;687 private FlowBuilder configurePathMapperSfFlow(final long pathId, MatchBuilder match, List&amp;lt;Action&amp;gt; actionList) &lt;/p&gt;
{
688     SfcOpenflowUtils.addMatchDscp(match, (short) pathId);
689     return configurePathMapperFlow(pathId, match, actionList, FLOW_PRIORITY_PATH_MAPPER+10);
690 }

&lt;p&gt;Line 688 in the later snippet shall raise an exception if the value generated in line 445 from the former snippet is greater than 63.&lt;/p&gt;

&lt;p&gt;As I see it there are two alternatives:&lt;/p&gt;

&lt;p&gt;1) When using VLAN DPLs in a SFP, make sure a path ID lower than 64 is provided when provisioning such SFP. Then line 447 from the former snippet will be run and the provisioned path ID shall be assigned to the RSP. This may be cumbersome, so&lt;/p&gt;

&lt;p&gt;2) before squeezing the path ID into the DSCP field, cut it down to 6 bits. Doing this should cause no harm since the ingress classifier shall cut the path ID down to 6 bits when squeezing it into the IP header of packets belonging to this RSP.&lt;/p&gt;

&lt;p&gt;I&apos;m asking the project lead his view on which alt. is better.&lt;/p&gt;</comment>
                            <comment id="46655" author="ebrjohn" created="Mon, 30 May 2016 14:28:37 +0000"  >&lt;p&gt;Regarding a max of 63 Service Chains when using a VLAN Data Plane Locator (DPL), your assumptions are correct, since the Service Chain ID is put in the 5-bit DSCP field of the IP header.&lt;/p&gt;

&lt;p&gt;In addition to the limited number of Service chains that can be created, there is no guarantee that the Service Function wont overwrite the DSCP field.&lt;/p&gt;

&lt;p&gt;This particular demo that uses VLAN is not intended to be used in production, but was intended to allow people to easily get started with ODL SFC. Having to place the Service Chain ID in the DSCP field highlights the need for an improved Service Chaining encapsulation technique, like NSH.&lt;/p&gt;

&lt;p&gt;If the above mentioned limitations with VLAN are not acceptable for your particular use case, then you will need to switch to using SFC with NSH.&lt;/p&gt;</comment>
                            <comment id="46656" author="jesus.javier.arauz@ericsson.com" created="Tue, 31 May 2016 09:19:59 +0000"  >&lt;p&gt;(In reply to Brady Johnson from comment #6)&lt;br/&gt;
&amp;gt; Regarding a max of 63 Service Chains when using a VLAN Data Plane Locator&lt;br/&gt;
&amp;gt; (DPL), your assumptions are correct, since the Service Chain ID is put in&lt;br/&gt;
&amp;gt; the 5-bit DSCP field of the IP header.&lt;br/&gt;
&amp;gt; &lt;br/&gt;
&amp;gt; In addition to the limited number of Service chains that can be created,&lt;br/&gt;
&amp;gt; there is no guarantee that the Service Function wont overwrite the DSCP&lt;br/&gt;
&amp;gt; field.&lt;br/&gt;
&amp;gt; &lt;br/&gt;
&amp;gt; This particular demo that uses VLAN is not intended to be used in&lt;br/&gt;
&amp;gt; production, but was intended to allow people to easily get started with ODL&lt;br/&gt;
&amp;gt; SFC. Having to place the Service Chain ID in the DSCP field highlights the&lt;br/&gt;
&amp;gt; need for an improved Service Chaining encapsulation technique, like NSH.&lt;br/&gt;
&amp;gt; &lt;br/&gt;
&amp;gt; If the above mentioned limitations with VLAN are not acceptable for your&lt;br/&gt;
&amp;gt; particular use case, then you will need to switch to using SFC with NSH.&lt;/p&gt;

&lt;p&gt;I&apos;m assuming then alternative 1 is the preferred one. @Chris, please update your JSON restconf files so a path id lower than 64 is included in SFP definitions.&lt;/p&gt;

&lt;p&gt;If no one complains, I&apos;m closing this TR within a few days.&lt;/p&gt;</comment>
                            <comment id="46657" author="jesus.javier.arauz@ericsson.com" created="Mon, 6 Jun 2016 13:55:45 +0000"  >&lt;p&gt;SFC using VLAN was a temporary solution until NSH were in place. Since this issue can be solved by means of manual configuration of SFPs, no fixes will be performed in the code.&lt;/p&gt;</comment>
                    </comments>
                    <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_11400" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10208" key="com.atlassian.jira.plugin.system.customfieldtypes:textfield">
                        <customfieldname>External issue ID</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>5583</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10201" key="com.atlassian.jira.plugin.system.customfieldtypes:url">
                        <customfieldname>External issue URL</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[https://bugs.opendaylight.org/show_bug.cgi?id=5583]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10206" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Issue Type</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10300"><![CDATA[Bug]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10204" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>ODL SR Target Milestone</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10317"><![CDATA[Beryllium]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10202" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Priority</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10301"><![CDATA[Normal]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i02fb3:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>