2 * Copyright 2015 Open Networking Laboratory
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.onosproject.bgpio.protocol.ver4;
18 import org.jboss.netty.buffer.ChannelBuffer;
19 import org.onosproject.bgpio.exceptions.BgpParseException;
20 import org.onosproject.bgpio.protocol.BgpKeepaliveMsg;
21 import org.onosproject.bgpio.protocol.BgpMessageReader;
22 import org.onosproject.bgpio.protocol.BgpMessageWriter;
23 import org.onosproject.bgpio.types.BgpHeader;
24 import org.onosproject.bgpio.protocol.BgpType;
25 import org.onosproject.bgpio.protocol.BgpVersion;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
29 import com.google.common.base.MoreObjects;
32 * Provides BGP keep alive message.
34 public class BgpKeepaliveMsgVer4 implements BgpKeepaliveMsg {
37 <Keepalive Message>::= <Common Header>
38 A KEEPALIVE message consists of only the message header and has a
42 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
43 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
51 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
53 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
58 protected static final Logger log = LoggerFactory
59 .getLogger(BgpKeepaliveMsgVer4.class);
61 private BgpHeader bgpMsgHeader;
62 public static final byte PACKET_VERSION = 4;
63 public static final int PACKET_MINIMUM_LENGTH = 19;
64 public static final int MARKER_LENGTH = 16;
65 public static final BgpType MSG_TYPE = BgpType.KEEP_ALIVE;
66 public static byte[] marker = new byte[] {(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
67 (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
68 (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
69 (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff};
71 public static final BgpKeepaliveMsgVer4.Reader READER = new Reader();
74 * Reader class for reading BGP keepalive message from channel buffer.
76 static class Reader implements BgpMessageReader<BgpKeepaliveMsg> {
79 public BgpKeepaliveMsg readFrom(ChannelBuffer cb, BgpHeader bgpHeader)
80 throws BgpParseException {
82 /* bgpHeader is not required in case of keepalive message and
83 Header is already read and no other fields except header in keepalive message.*/
84 return new BgpKeepaliveMsgVer4();
89 * Default constructor.
91 public BgpKeepaliveMsgVer4() {
95 * Builder class for BGP keepalive message.
97 static class Builder implements BgpKeepaliveMsg.Builder {
98 BgpHeader bgpMsgHeader;
101 public Builder setHeader(BgpHeader bgpMsgHeader) {
102 this.bgpMsgHeader = bgpMsgHeader;
107 public BgpKeepaliveMsg build() {
108 return new BgpKeepaliveMsgVer4();
113 public void writeTo(ChannelBuffer cb) {
114 WRITER.write(cb, this);
117 static final Writer WRITER = new Writer();
120 * Writer class for writing the BGP keepalive message to channel buffer.
122 static class Writer implements BgpMessageWriter<BgpKeepaliveMsgVer4> {
125 public void write(ChannelBuffer cb, BgpKeepaliveMsgVer4 message) {
128 cb.writeBytes(marker, 0, MARKER_LENGTH);
130 // write length of header
131 cb.writeShort(PACKET_MINIMUM_LENGTH);
133 // write the type of message
134 cb.writeByte(MSG_TYPE.getType());
139 public BgpVersion getVersion() {
140 return BgpVersion.BGP_4;
144 public BgpType getType() {
149 public BgpHeader getHeader() {
150 return this.bgpMsgHeader;
154 public String toString() {
155 return MoreObjects.toStringHelper(getClass()).toString();