use of org.onosproject.bgpio.protocol.BgpMessage in project onos by opennetworkinglab.
the class MpUnReachNlriTest method mpUnReachNlriTest.
/**
* This testcase checks BGP update message.
*/
@Test
public void mpUnReachNlriTest() throws BgpParseException {
// BGP flow spec Message
byte[] flowSpecMsg = new byte[] { (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, 0x00, 0x2b, 0x02, 0x00, 0x00, 0x00, 0x14, (byte) 0x90, 0x0f, 0x00, 0x10, 0x00, 0x01, (byte) 0x85, 0x0c, 0x02, 0x20, (byte) 0xc0, (byte) 0xa8, 0x07, 0x36, 0x03, (byte) 0x81, 0x67, 0x04, (byte) 0x81, 0x01 };
byte[] testFsMsg;
ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
buffer.writeBytes(flowSpecMsg);
BgpMessageReader<BgpMessage> reader = BgpFactories.getGenericReader();
BgpMessage message;
BgpHeader bgpHeader = new BgpHeader();
message = reader.readFrom(buffer, bgpHeader);
assertThat(message, instanceOf(BgpUpdateMsgVer4.class));
ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
message.writeTo(buf);
int readLen = buf.writerIndex();
testFsMsg = new byte[readLen];
buf.readBytes(testFsMsg, 0, readLen);
assertThat(testFsMsg, is(flowSpecMsg));
}
use of org.onosproject.bgpio.protocol.BgpMessage in project onos by opennetworkinglab.
the class MpReachNlriTest method mpReachNlriTest2.
/**
* This testcase checks BGP update message.
*/
@Test
public void mpReachNlriTest2() throws BgpParseException {
// BGP flow spec Message
byte[] flowSpecMsg = new byte[] { (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, 0x00, 0x52, 0x02, 0x00, 0x00, 0x00, 0x3b, 0x40, 0x01, 0x01, 0x01, 0x40, 0x02, 0x04, 0x02, 0x01, 0x00, (byte) 0xc8, (byte) 0x80, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, (byte) 0xc0, 0x10, 0x10, (byte) 0x80, 0x06, 0x00, 0x7b, 0x40, 0x60, 0x00, 0x00, (byte) 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, (byte) 0x90, 0x0e, 0x00, 0x12, 0x00, 0x01, (byte) 0x85, 0x00, 0x00, 0x0c, 0x01, 0x1e, (byte) 0xc0, (byte) 0xa8, 0x02, 0x00, 0x02, 0x1e, (byte) 0xc0, (byte) 0xa8, 0x01, 0x00 };
byte[] testFsMsg;
ChannelBuffer buffer = ChannelBuffers.dynamicBuffer();
buffer.writeBytes(flowSpecMsg);
BgpMessageReader<BgpMessage> reader = BgpFactories.getGenericReader();
BgpMessage message;
BgpHeader bgpHeader = new BgpHeader();
message = reader.readFrom(buffer, bgpHeader);
assertThat(message, instanceOf(BgpUpdateMsgVer4.class));
ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
message.writeTo(buf);
int readLen = buf.writerIndex();
testFsMsg = new byte[readLen];
buf.readBytes(testFsMsg, 0, readLen);
assertThat(testFsMsg, is(flowSpecMsg));
}
use of org.onosproject.bgpio.protocol.BgpMessage in project onos by opennetworkinglab.
the class BgpChannelHandler method sendKeepAliveMessage.
/**
* Send keep alive message.
*
* @throws IOException when channel is disconnected
* @throws BgpParseException while building keep alive message
*/
synchronized void sendKeepAliveMessage() throws IOException, BgpParseException {
BgpMessage msg = factory4.keepaliveMessageBuilder().build();
log.debug("Sending keepalive message to {}", channel.getRemoteAddress());
channel.write(Collections.singletonList(msg));
}
use of org.onosproject.bgpio.protocol.BgpMessage in project onos by opennetworkinglab.
the class BgpChannelHandler method sendNotification.
/**
* Send notification message to peer.
*
* @param errorCode error code send in notification
* @param errorSubCode sub error code send in notification
* @param data data to send in notification
* @throws IOException, BgpParseException while building message
*/
private void sendNotification(byte errorCode, byte errorSubCode, byte[] data) throws IOException, BgpParseException {
BgpMessage msg = factory4.notificationMessageBuilder().setErrorCode(errorCode).setErrorSubCode(errorSubCode).setData(data).build();
log.debug("Sending notification message to {}", channel.getRemoteAddress());
channel.write(Collections.singletonList(msg));
}
use of org.onosproject.bgpio.protocol.BgpMessage in project onos by opennetworkinglab.
the class BgpMessageDecoder method decode.
@Override
protected Object decode(ChannelHandlerContext ctx, Channel channel, ChannelBuffer buffer) throws Exception {
log.debug("MESSAGE IS RECEIVED.");
if (!channel.isConnected()) {
log.info("Channel is not connected.");
return null;
}
HexDump.dump(buffer);
BgpMessageReader<BgpMessage> reader = BgpFactories.getGenericReader();
List<BgpMessage> msgList = (List<BgpMessage>) ctx.getAttachment();
if (msgList == null) {
msgList = new LinkedList<>();
}
try {
while (buffer.readableBytes() > 0) {
buffer.markReaderIndex();
BgpHeader bgpHeader = new BgpHeader();
BgpMessage message = reader.readFrom(buffer, bgpHeader);
msgList.add(message);
}
ctx.setAttachment(null);
return msgList;
} catch (Exception e) {
log.debug("Bgp protocol message decode error");
buffer.resetReaderIndex();
buffer.discardReadBytes();
ctx.setAttachment(msgList);
}
return null;
}
Aggregations