es.tid.pce.pcep.objects.BitmapLabelSet Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of network-protocols Show documentation
Show all versions of network-protocols Show documentation
BGP-LS,OSPF-TE,PCEP and RSVP-TE protocol encodings.
The newest version!
package es.tid.pce.pcep.objects;
import java.util.Arrays;
import es.tid.pce.pcep.PCEPProtocolViolationException;
import es.tid.pce.pcep.constructs.NCF;
/**
* � Attaching a new LABEL object (class 129, type 1) as an attribute of the computed path. If there is only one label object it is the SUGGESTED_LABEL.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Object-Class | OT |Res|P|I| Object Length (bytes) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 4 | Num Labels | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NCF |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Bit Map Word #1 (Lowest numerical labels) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
: :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Bit Map Word #N (Highest numerical labels) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
* @author Oscar Gonzalez de Dios
* @version 0.1
*/
public class BitmapLabelSet extends LabelSet{
private byte[] bytesBitmap;
private int numLabels;
private NCF ncf;
//Constructors
public BitmapLabelSet(){
super();
this.setOT(ObjectParameters.PCEP_OBJECT_TYPE_LABEL_SET_BITMAP);
}
public BitmapLabelSet(byte []bytes, int offset) throws MalformedPCEPObjectException{
super(bytes,offset);
decode();
}
//Encode and Decode
/**
* Encode CLOSE message
* Only reason is encoded. The rest is set to 0
*/
public void encode(){
int numberBytes =getNumberBytes(numLabels);
if (ncf!=null){
try {
ncf.encode();
} catch (PCEPProtocolViolationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
ncf=new NCF();
try {
ncf.encode();
} catch (PCEPProtocolViolationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
int size_bytes = 8+ncf.getLength()+numberBytes;
if ((size_bytes%4)!=0){
size_bytes=size_bytes+(4-(size_bytes%4));
}
this.setObjectLength(size_bytes);
this.object_bytes = new byte[size_bytes];
encode_header();
int offset = 4;//header
int val=4;
this.object_bytes[offset+1]=(byte) ( ((numLabels>>4)&0x0F)|((val<<4)&0xF0));
this.object_bytes[offset+1]=(byte) (numLabels&0xFF);
offset= offset+4;
System.arraycopy(ncf.getBytes(), 0, this.getBytes(), offset, ncf.getLength());
offset = offset+4;
System.arraycopy(this.bytesBitmap,0, this.getBytes(), offset,numberBytes);
offset = offset+numberBytes;
for (int i=offset;i