Giter VIP home page Giter VIP logo

netphony-network-protocols's Introduction

netphony-network-protocols v1.4.1

Latest Maven Central Release:

Maven Central

Coverage status

Master
Coverage Status

The netphony-network-protocols library is an implementation of four networking protocols:

  • PCEP protocol: Path Computation Element Protocol (PCEP) RFC 5440.
  • BGP-LS protocol: North-Bound Distribution of Link-State and Traffic Engineering Information using BGP https://tools.ietf.org/html/rfc7752. Support of BGP-LS Traffic Engineering (TE) Metric Extensions
  • RSVP-TE protocol: Resource reservation protocol (RSVP) with Traffic Engineering extensions.
  • OSPF-TE protocol: OSPF Version 2 protocol with Traffic Engineering extensions.

The protocol library can be easily integrated in any software that needs to interact with other software/devices using these protoocols. The library provides the encoding and decoding from java objects to bit-level. Note that, the state machine and set up of sessions is provided by other components, also available in github.

The PCEP implemnentation has been tested against other PCEP implementations. Commercial implementations (Cisco XTC). Research Implementations (Telecom Italia Implementation, CTTC Implementation and CNIT Implementation) .

The Netphony BGP-LS implementation is known to interoperate with Telecom Italia Implementation, CTTC Implementation and CNIT Implementation and Juniper MX routers. It is listed in the IETF BGP-LS implemenation report https://tools.ietf.org/html/draft-ietf-idr-ls-distribution-impl-04

The library is maintained to be up-to-date to the latest version of the internet-drafts/RFCs. Contributions are highly welcomed.

Detailed CHANGELOG click here

Latest news

Compilation and use

The library can be built using the maven tool. There is a set of Junit tests included that check the enconding/decoding process . Contributions on expanding the test suite are welcomed. To build the .jar file and run the tests, clone the repository, go to the main directory and run:

   cd netphony-network-protocols
   mvn package
   mvn install

To use the library in your application, add the dependency in your pom.xml file:

  <dependency>
    <groupId>es.tid.netphony</groupId>
    <artifactId>network-protocols</artifactId>
    <version>1.4.0</version>
  </dependency>

Authors keep also a copy of the artifact in maven central to facilitate the deployment. (*) In process

How to use the code:

ENCODING

1-> Create a new instance of the desired message

    PCEPRequest message = new PCEPRequest();

2-> Create instances of the desired constructs or objects and add them to the message

    Request req = new Request();
    //RequestParameters
    RequestParameters rp= new RequestParameters();
    rp.setPbit(true);				
    rp.setRequestID(123);		
    rp.setPrio(1);		
    rp.setReopt(false);	
    rp.setBidirect(false);
    rp.setLoose(false);
    req.setRequestParameters(rp);
    //EndPoints
    EndPointsIPv4 ep=new EndPointsIPv4();				
    req.setEndPoints(ep);
    Inet4Address ipp = (Inet4Address)Inet4Address.getByName("172.16.101.101");
    ep.setSourceIP(ipp);
   .....
   message.addRequest(req); 	

3-> Call encode()

   message.encode();

4-> Get bytes and send them!

   out.write(message.getBytes());
   out.flush();

PCEP Protocol and Support

The Path Computation Element Protocol (PCEP) is used for communications between a PCC and a PCE, or between two PCEs, in compliance with RFC4657. Such interactions include path computation requests, path computation replies as well as notifications of specific states related to the use of a PCE in the context of MPLS and GMPLS Traffic Engineering. Recent extensions. A good source of PCE material can be found in http://ict-one.eu/pace/public_wiki/mediawiki-1.19.7/index.php?title=Tools

The detail of the messages, objects and TLVs can be found in click here

  • RFC 5440: Full compliance
  • RFC 5521: Path-key not supported
  • RFC 5886: Full compliance
  • RFC 6006: Only P2MP END-POINTS Object for IPv4
  • RFC 8231: Full compliance
  • RFC 8281: Full compliance
  • draft-ietf-pce-gmpls-pcep-extensions-10 (partial)
  • draft-ietf-pce-inter-layer-ext-05 (partial)
  • draft-ietf-pce-hierarchy-extensions-02
  • draft-ietf-pce-stateful-pce-05
  • draft-ietf-pce-pcep-stateful-pce-gmpls-00

RSVP-TE Support

Detailed RSVP-TE Support click here

OSPF-TE

Detailed OSPF-TE Support click here

OSPF-TE v2 LSA from RFC3630 Inter-AS-TE-v2 LSA from RFC5392 http://tools.ietf.org/html/rfc5392

BGP-LS Support

It is used to exchange TE information between BGP-LS speakers.

Detailed BGP4 & BGP-LS Support click here

(*) The BGLP-LS Speaker is available in https://github.com/telefonicaid/netphony-topology

#Acknowledgements

The software has been developed by Telefonica I+D Core & Transport Team, led by Juan Pedro Fernandez Palacios, in internal innovation projects and through several EU funded research proyects, which continuously added functionality. The Core & Transport Team group of Telefonica working with the propocols if formed by Juan Pedro Fernandez Palacios (team leader), Victor Lopez, Oscar Gonzalez de Dios, Felipe Jiménez, Luis Miguel Contreras, Michel Carnero and Eduardo Yusta. All of them have contributed to the code, either directly of with ideas and as beta-testers. The main maintainer of the code is Oscar Gonzalez de Dios.

The effort to release as open source of the code was funded by the E.U. CSA PACE. The code has been upgraded in the E.U. projects STRONGEST, PACE, IDEALIST, ACINO and 5GEx, as well as Telefonica Innovation activities. The last version of the code has been updated in the E.U. ALLEGRO project

PCEP and BGP-LS are included as requirement of the MUST Sub-group in TIP.

netphony-network-protocols's People

Contributors

andreamilani avatar asgamb avatar dependabot[bot] avatar eduardoyusta avatar haikami avatar jgm1986 avatar jgrajos avatar jjpedreno avatar luis-cepeda avatar michelcarnero avatar mohitc avatar oscargdd avatar rrpaton avatar sinusignal avatar victoruceda avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

netphony-network-protocols's Issues

Upgrade junit

Upgrade junit:junit to version 4.13.1 or later. For example:

junit junit [4.13.1,)

Upgrade from draft-ietf-pce-pce-initiated-lsp-00 to rfc8281

Current version was based on draft-ietf-pce-pce-initiated-lsp-00. Need to upgrade to rfc8281
Differences:

  • The optional SPEAKER-ENTITY-ID TLV defined in [RFC8232] MAY be included in the LSP object in a PCRpt message as an optional TLV.
  • LSP Object flag: OLD 24, NEW 4 ( Create RFC 8281)

8.3. SRP object

IANA has created a new subregistry, named "SRP Object Flag Field",
within the "Path Computation Element Protocol (PCEP) Numbers"
registry, to manage the Flag field of the SRP object. New values are
to be assigned by Standards Action [RFC8126]. Each bit is tracked
with the following qualities: bit number (counting from bit 0 as the
most significant bit), description, and defining RFC.

The following values are defined in this document:

                Bit     Description       Reference
                ---     -----------       -------------

                 31     LSP-Remove        RFC 8281

8.4. STATEFUL-PCE-CAPABILITY TLV

[RFC8231] defines the STATEFUL-PCE-CAPABILITY TLV; per that RFC, IANA
created a registry to manage the value of the STATEFUL-PCE-CAPABILITY
TLV's Flag field. IANA has allocated a new bit in the STATEFUL-PCE-
CAPABILITY TLV Flag Field registry, as follows:

        Bit  Description                      Reference
        ---  -------------------------------- -------------

         29  LSP-INSTANTIATION-CAPABILITY (I) RFC 8281

8.5. PCEP-Error Object

IANA has registered the following error types and error values within
the "PCEP-ERROR Object Error Types and Values" subregistry of the
PCEP Numbers registry.

Error-Type Meaning


  10       Reception of an invalid object

            Error-value=8:  SYMBOLIC-PATH-NAME TLV missing

  19       Invalid Operation

            Error-value=6:  PCE-initiated LSP limit reached
            Error-value=7:  Delegation for PCE-initiated LSP cannot
                             be revoked
            Error-value=8:  Non-zero PLSP-ID in LSP Initiate Request
            Error-value=9:  LSP is not PCE initiated
            Error-value=10: PCE-initiated operation-frequency limit
                             reached

  23       Bad parameter value

            Error-value=1:  SYMBOLIC-PATH-NAME in use
            Error-value=2:  Speaker identity included for an LSP
                             that is not PCE initiated

  24       LSP instantiation error

            Error-value=1:  Unacceptable instantiation parameters
            Error-value=2:  Internal error
            Error-value=3:  Signaling error

FIX Domain ID TLV encoding

Current Domain ID TLV encoding/decoding is done following STRONGEST project implementation agreement. Replace with encoding/decoding from draft-ietf-pce-hierarchy-extensions-01

Error test PCEP Construct es.tid.pce.pcep.constructs.UpdateRequest

error message:
Testing PCEP Construct es.tid.pce.pcep.constructs.UpdateRequest
FIXME: es.tid.rsvp.objects.subobjects.EROSubobject
java.lang.IllegalAccessException: Class es.tid.tests.TestPCEPCommons can not access a member of class java.util.LinkedList with modifiers "private"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:110)
at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:262)
at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:254)
at java.lang.reflect.Method.invoke(Method.java:599)
at es.tid.tests.TestPCEPCommons.createAllFields(TestPCEPCommons.java:129)
at es.tid.tests.TestPCEPCommons.createAllFields(TestPCEPCommons.java:95)
at es.tid.tests.TestPCEPCommons.createAllFields(TestPCEPCommons.java:95)
at es.tid.tests.TestPCEPCommons.createAllFields(TestPCEPCommons.java:95)
at es.tid.tests.TestPCEPConstructs.test(TestPCEPConstructs.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:367)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:290)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:242)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
Creating es.tid.pce.pcep.objects.Metric
java.lang.IllegalAccessException: Class es.tid.tests.TestPCEPCommons can not access a member of class java.util.LinkedList with modifiers "private"
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:110)
at java.lang.reflect.AccessibleObject.slowCheckMemberAccess(AccessibleObject.java:262)
at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:254)
at java.lang.reflect.Method.invoke(Method.java:599)
at es.tid.tests.TestPCEPCommons.createAllFields(TestPCEPCommons.java:140)
at es.tid.tests.TestPCEPCommons.createAllFields(TestPCEPCommons.java:95)
at es.tid.tests.TestPCEPConstructs.test(TestPCEPConstructs.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runners.Suite.runChild(Suite.java:128)
at org.junit.runners.Suite.runChild(Suite.java:27)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:367)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:274)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:161)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:290)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:242)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)

Complete missing flags of STATEFUL-PCE-CAPABILITY TLV

Complete the following flags that are currently not implemented.

21 PD-LSP-CAPABILITY (PD-bit) [RFC8934] (NOT IMPLEMENTED)
22 LSP-SCHEDULING-CAPABILITY (B-bit) [RFC8934] (NOT IMPLEMENTED)
23 P2MP-LSP-INSTANTIATION-CAPABILITY [RFC8623] (NOT IMPLEMENTED)
24 P2MP-LSP-UPDATE-CAPABILITY [RFC8623] (NOT IMPLEMENTED)
25 P2MP-CAPABILITY [RFC8623] (NOT IMPLEMENTED)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.