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 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 BGPKeepaliveMsgVer4() {
95 * Builder class for BGP keepalive message.
97 static class Builder implements BGPKeepaliveMsg.Builder {
98 BGPHeader bgpMsgHeader;
101 public BGPVersion getVersion() {
102 return BGPVersion.BGP_4;
106 public BGPType getType() {
107 return BGPType.KEEP_ALIVE;
111 public BGPHeader getHeader() {
112 return this.bgpMsgHeader;
116 public Builder setHeader(BGPHeader bgpMsgHeader) {
117 this.bgpMsgHeader = bgpMsgHeader;
122 public BGPKeepaliveMsg build() {
123 return new BGPKeepaliveMsgVer4();
128 public void writeTo(ChannelBuffer cb) {
129 WRITER.write(cb, this);
132 static final Writer WRITER = new Writer();
135 * Writer class for writing the BGP keepalive message to channel buffer.
137 static class Writer implements BGPMessageWriter<BGPKeepaliveMsgVer4> {
140 public void write(ChannelBuffer cb, BGPKeepaliveMsgVer4 message) {
143 cb.writeBytes(marker, 0, MARKER_LENGTH);
145 // write length of header
146 cb.writeShort(PACKET_MINIMUM_LENGTH);
148 // write the type of message
149 cb.writeByte(MSG_TYPE.getType());
154 public BGPVersion getVersion() {
155 return BGPVersion.BGP_4;
159 public BGPType getType() {
164 public BGPHeader getHeader() {
165 return this.bgpMsgHeader;
169 public String toString() {
170 return MoreObjects.toStringHelper(getClass()).toString();