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 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 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 BgpMessageEncoder method encode.
@Override
protected Object encode(ChannelHandlerContext ctx, Channel channel, Object msg) throws Exception {
log.debug("BGPMessageEncoder::encode");
if (!(msg instanceof List)) {
log.debug("Invalid msg.");
return msg;
}
@SuppressWarnings("unchecked") List<BgpMessage> msglist = (List<BgpMessage>) msg;
ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
log.debug("SENDING MESSAGE");
for (BgpMessage pm : msglist) {
pm.writeTo(buf);
}
HexDump.dump(buf);
return buf;
}
use of org.onosproject.bgpio.protocol.BgpMessage in project onos by opennetworkinglab.
the class BgpChannelHandler method sendHandshakeOpenMessage.
/**
* Send handshake open message to the peer.
*
* @throws IOException, BgpParseException
*/
private void sendHandshakeOpenMessage() throws IOException, BgpParseException {
int bgpId;
BgpCfg.FlowSpec flowSpec = bgpconfig.flowSpecCapability();
BgpCfg.ConnectionType connectionType = bgpconfig.connectionType();
boolean flowSpecStatus = false;
boolean vpnFlowSpecStatus = false;
boolean ipv4ConnectionTypeStatus = true;
boolean ipv6ConnectionTypeStatus = false;
bgpId = Ip4Address.valueOf(bgpconfig.getRouterId()).toInt();
boolean evpnCapability = bgpconfig.getEvpnCapability();
if (flowSpec == BgpCfg.FlowSpec.IPV4) {
flowSpecStatus = true;
} else if (flowSpec == BgpCfg.FlowSpec.VPNV4) {
vpnFlowSpecStatus = true;
} else if (flowSpec == BgpCfg.FlowSpec.IPV4_VPNV4) {
flowSpecStatus = true;
vpnFlowSpecStatus = true;
}
if (connectionType == BgpCfg.ConnectionType.IPV6) {
ipv4ConnectionTypeStatus = false;
ipv6ConnectionTypeStatus = true;
} else if (connectionType == BgpCfg.ConnectionType.IPV4_IPV6) {
ipv4ConnectionTypeStatus = true;
ipv6ConnectionTypeStatus = true;
} else {
ipv4ConnectionTypeStatus = true;
ipv6ConnectionTypeStatus = false;
}
BgpMessage msg = factory4.openMessageBuilder().setAsNumber((short) bgpconfig.getAsNumber()).setHoldTime(bgpconfig.getHoldTime()).setBgpId(bgpId).setLsCapabilityTlv(bgpconfig.getLsCapability()).setLargeAsCapabilityTlv(bgpconfig.getLargeASCapability()).setFlowSpecCapabilityTlv(flowSpecStatus).setVpnFlowSpecCapabilityTlv(vpnFlowSpecStatus).setEvpnCapabilityTlv(evpnCapability).setFlowSpecRpdCapabilityTlv(bgpconfig.flowSpecRpdCapability()).setIpV4UnicastCapabilityTlvSet(ipv4ConnectionTypeStatus).setIpV6UnicastCapabilityTlvSet(ipv6ConnectionTypeStatus).build();
log.debug("Sending open message to {}", channel.getRemoteAddress());
channel.write(Collections.singletonList(msg));
}
Aggregations