import org.opendaylight.protocol.bgp.parser.BGPMessageFactory;
import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
-import org.opendaylight.protocol.bgp.parser.spi.ProviderContext;
import org.opendaylight.protocol.framework.DeserializerException;
import org.opendaylight.protocol.framework.DocumentedException;
import org.opendaylight.yangtools.yang.binding.Notification;
import com.google.common.collect.Lists;
public final class BGPMessageFactoryImpl implements BGPMessageFactory {
- private static final class Holder {
- private static final BGPMessageFactoryImpl INSTANCE;
-
- static {
- final ProviderContext pc = SingletonProviderContext.getInstance();
-
- new ActivatorImpl().start(pc);
-
- INSTANCE = new BGPMessageFactoryImpl(pc.getMessageRegistry());
- }
- }
-
private final MessageRegistry registry;
- private BGPMessageFactoryImpl(final MessageRegistry registry) {
+ public BGPMessageFactoryImpl(final MessageRegistry registry) {
this.registry = Preconditions.checkNotNull(registry);
}
- public static BGPMessageFactoryImpl getInstance() {
- return Holder.INSTANCE;
- }
-
/*
* (non-Javadoc)
* @see org.opendaylight.protocol.bgp.parser.BGPMessageParser#parse(byte[])
import com.google.common.base.Preconditions;
public final class SimpleAddressFamilyRegistry extends AbstractFamilyRegistry<AddressFamily, Integer> implements AddressFamilyRegistry {
- private static final class Holder {
- private static final AddressFamilyRegistry INSTANCE = new SimpleAddressFamilyRegistry();
- }
-
- private SimpleAddressFamilyRegistry() {
-
- }
-
- public static AddressFamilyRegistry getInstance() {
- return Holder.INSTANCE;
- }
-
@Override
public AutoCloseable registerAddressFamily(final Class<? extends AddressFamily> clazz, final int number) {
Preconditions.checkArgument(number >= 0 && number <= 65535);
import com.google.common.primitives.UnsignedBytes;
public final class SimpleAttributeRegistry implements AttributeRegistry {
- private static final class Holder {
- private static final AttributeRegistry INSTANCE = new SimpleAttributeRegistry();
- }
-
- private SimpleAttributeRegistry() {
-
- }
-
- public static AttributeRegistry getInstance() {
- return Holder.INSTANCE;
- }
-
private final HandlerRegistry<DataContainer, AttributeParser, AttributeSerializer> handlers = new HandlerRegistry<>();
@Override
import com.google.common.base.Preconditions;
public final class SimpleCapabilityRegistry implements CapabilityRegistry {
- private static final class Holder {
- private static final CapabilityRegistry INSTANCE = new SimpleCapabilityRegistry();
- }
-
private final HandlerRegistry<DataContainer, CapabilityParser, CapabilitySerializer> handlers = new HandlerRegistry<>();
- private SimpleCapabilityRegistry() {
-
- }
-
- public static CapabilityRegistry getInstance() {
- return Holder.INSTANCE;
- }
-
@Override
public AutoCloseable registerCapabilityParser(final int messageType, final CapabilityParser parser) {
Preconditions.checkArgument(messageType >= 0 && messageType <= 255);
import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
import org.opendaylight.protocol.bgp.parser.spi.MessageParser;
-import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
import org.opendaylight.protocol.bgp.parser.spi.MessageSerializer;
import org.opendaylight.protocol.concepts.HandlerRegistry;
import org.opendaylight.yangtools.yang.binding.DataContainer;
import org.opendaylight.yangtools.yang.binding.Notification;
public final class SimpleMessageRegistry extends AbstractMessageRegistry {
- private static final class Holder {
- private static final MessageRegistry INSTANCE = new SimpleMessageRegistry();
- }
-
private final HandlerRegistry<DataContainer, MessageParser, MessageSerializer> handlers = new HandlerRegistry<>();
- private SimpleMessageRegistry() {
-
- }
-
- public static MessageRegistry getInstance() {
- return Holder.INSTANCE;
- }
-
@Override
protected Notification parseBody(final int type, final byte[] body, final int messageLength) throws BGPDocumentedException {
final MessageParser parser = handlers.getParser(type);
import com.google.common.primitives.UnsignedBytes;
public final class SimpleNlriRegistry implements NlriRegistry {
- private static final class Holder {
- private static final NlriRegistry INSTANCE =
- new SimpleNlriRegistry(SimpleAddressFamilyRegistry.getInstance(),
- SimpleSubsequentAddressFamilyRegistry.getInstance());
- }
-
private final ConcurrentMap<BgpTableType, NlriParser> handlers = new ConcurrentHashMap<>();
private final SubsequentAddressFamilyRegistry safiReg;
private final AddressFamilyRegistry afiReg;
- private SimpleNlriRegistry(final AddressFamilyRegistry afiReg, final SubsequentAddressFamilyRegistry safiReg) {
+ public SimpleNlriRegistry(final AddressFamilyRegistry afiReg, final SubsequentAddressFamilyRegistry safiReg) {
this.afiReg = Preconditions.checkNotNull(afiReg);
this.safiReg = Preconditions.checkNotNull(safiReg);
}
- public static NlriRegistry getInstance() {
- return Holder.INSTANCE;
- }
-
private static BgpTableType createKey(final Class<? extends AddressFamily> afi,
final Class<? extends SubsequentAddressFamily> safi) {
Preconditions.checkNotNull(afi);
import com.google.common.base.Preconditions;
public final class SimpleParameterRegistry implements ParameterRegistry {
- private static final class Holder {
- private static final ParameterRegistry INSTANCE = new SimpleParameterRegistry();
- }
-
private final HandlerRegistry<DataContainer, ParameterParser, ParameterSerializer> handlers = new HandlerRegistry<>();
- private SimpleParameterRegistry() {
-
- }
-
- public static ParameterRegistry getInstance() {
- return Holder.INSTANCE;
- }
-
@Override
public AutoCloseable registerParameterParser(final int messageType, final ParameterParser parser) {
Preconditions.checkArgument(messageType >= 0 && messageType <= 255);
public final class SimpleSubsequentAddressFamilyRegistry extends
AbstractFamilyRegistry<SubsequentAddressFamily, Integer> implements SubsequentAddressFamilyRegistry {
- private static final class Holder {
- private static final SubsequentAddressFamilyRegistry INSTANCE =
- new SimpleSubsequentAddressFamilyRegistry();
- }
-
- private SimpleSubsequentAddressFamilyRegistry() {
-
- }
-
- public static final SubsequentAddressFamilyRegistry getInstance() {
- return Holder.INSTANCE;
- }
-
@Override
public AutoCloseable registerSubsequentAddressFamily(final Class<? extends SubsequentAddressFamily> clazz, final int number) {
Preconditions.checkArgument(number >= 0 && number <= 255);
public final class SingletonProviderContext implements ProviderContext {
private static final class Holder {
- private static final ProviderContext INSTANCE = new SingletonProviderContext();
+ private static final ProviderContext INSTANCE;
+
+ static {
+ final ProviderContext pc = new SingletonProviderContext();
+ new ActivatorImpl().start(pc);
+ INSTANCE = pc;
+ }
}
- private SingletonProviderContext() {
+ private final AddressFamilyRegistry afiReg = new SimpleAddressFamilyRegistry();
+ private final AttributeRegistry attrReg = new SimpleAttributeRegistry();
+ private final CapabilityRegistry capReg = new SimpleCapabilityRegistry();
+ private final MessageRegistry msgReg = new SimpleMessageRegistry();
+ private final NlriRegistry nlriReg;
+ private final ParameterRegistry paramReg = new SimpleParameterRegistry();
+ private final SubsequentAddressFamilyRegistry safiReg= new SimpleSubsequentAddressFamilyRegistry();
+ private SingletonProviderContext() {
+ nlriReg = new SimpleNlriRegistry(afiReg, safiReg);
}
public static ProviderContext getInstance() {
@Override
public AddressFamilyRegistry getAddressFamilyRegistry() {
- return SimpleAddressFamilyRegistry.getInstance();
+ return afiReg;
}
@Override
public AttributeRegistry getAttributeRegistry() {
- return SimpleAttributeRegistry.getInstance();
+ return attrReg;
}
@Override
public CapabilityRegistry getCapabilityRegistry() {
- return SimpleCapabilityRegistry.getInstance();
+ return capReg;
}
@Override
public MessageRegistry getMessageRegistry() {
- return SimpleMessageRegistry.getInstance();
+ return msgReg;
}
@Override
public NlriRegistry getNlriRegistry() {
- return SimpleNlriRegistry.getInstance();
+ return nlriReg;
}
@Override
public ParameterRegistry getParameterRegistry() {
- return SimpleParameterRegistry.getInstance();
+ return paramReg;
}
@Override
public SubsequentAddressFamilyRegistry getSubsequentAddressFamilyRegistry() {
- return SimpleSubsequentAddressFamilyRegistry.getInstance();
+ return safiReg;
}
}
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
-import org.opendaylight.protocol.bgp.parser.BGPMessageFactory;
import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
import org.opendaylight.protocol.bgp.parser.impl.message.BGPUpdateMessageParser;
+import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
import org.opendaylight.protocol.bgp.parser.spi.MessageUtil;
import org.opendaylight.protocol.concepts.IGPMetric;
import org.opendaylight.protocol.concepts.IPv4;
private static int MAX_SIZE = 300;
- private static BGPMessageFactory reg;
-
private static BGPUpdateMessageParser updateParser;
@BeforeClass
public static void setUp() throws Exception {
- reg = BGPMessageFactoryImpl.getInstance();
- updateParser = new BGPUpdateMessageParser(SimpleAttributeRegistry.getInstance());
+ updateParser = new BGPUpdateMessageParser(SingletonProviderContext.getInstance().getAttributeRegistry());
for (int i = 1; i <= COUNTER; i++) {
final String name = "/up" + i + ".bin";
*/
@Test
public void testOpenMessage() throws Exception {
- final BGPMessageFactory msgFactory = BGPMessageFactoryImpl.getInstance();
- final Open open = (Open) msgFactory.parse(inputBytes.get(13)).get(0);
+ final MessageRegistry msgReg = SingletonProviderContext.getInstance().getMessageRegistry();
+ final Open open = (Open) msgReg.parseMessage(inputBytes.get(13));
final Set<BgpTableType> types = Sets.newHashSet();
for (final BgpParameters param : open.getBgpParameters()) {
final CParameters p = param.getCParameters();
import org.junit.Test;
import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
-import org.opendaylight.protocol.bgp.parser.BGPMessageFactory;
import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
import org.opendaylight.protocol.bgp.parser.impl.message.update.CommunitiesParser;
+import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
import org.opendaylight.protocol.framework.DeserializerException;
import org.opendaylight.protocol.framework.DocumentedException;
import org.opendaylight.protocol.util.ByteList;
@Test
public void testBGPHeaderParser() throws IOException {
- final BGPMessageFactory h = BGPMessageFactoryImpl.getInstance();
+ final MessageRegistry msgReg = SingletonProviderContext.getInstance().getMessageRegistry();
try {
- h.parse(new byte[] { (byte) 0, (byte) 0 });
+ msgReg.parseMessage(new byte[] { (byte) 0, (byte) 0 });
fail("Exception should have occured.");
} catch (final IllegalArgumentException e) {
assertEquals("Too few bytes in passed array. Passed: 2. Expected: >= 19.", e.getMessage());
@Test
public void testMessageParser() throws IOException {
- final BGPMessageFactory parser = BGPMessageFactoryImpl.getInstance();
+ final MessageRegistry msgReg = SingletonProviderContext.getInstance().getMessageRegistry();
String ex = "";
try {
- parser.put(null);
+ msgReg.serializeMessage(null);
} catch (final IllegalArgumentException e) {
ex = e.getMessage();
}
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
-import org.junit.Before;
import org.junit.Test;
import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
import org.opendaylight.protocol.bgp.parser.BGPParsingException;
* To test incorrect values.
*/
public class PathAttributeParserTest {
-
- @Before
- public void setUp() {
- // Activates everything
- BGPMessageFactoryImpl.getInstance();
- }
-
@Test
public void testOriginParser() {
try {
- SimpleAttributeRegistry.getInstance().parseAttributes(new byte[] { 0x40, 0x01, 0x01, 0x04 });
+ SingletonProviderContext.getInstance().getAttributeRegistry().parseAttributes(new byte[] { 0x40, 0x01, 0x01, 0x04 });
fail("This needs to fail.");
} catch (final BGPDocumentedException e) {
assertEquals("Unknown Origin type.", e.getMessage());
import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
import org.opendaylight.protocol.bgp.parser.BGPError;
import org.opendaylight.protocol.bgp.parser.BgpTableTypeImpl;
-import org.opendaylight.protocol.bgp.parser.impl.BGPMessageFactoryImpl;
+import org.opendaylight.protocol.bgp.parser.impl.SingletonProviderContext;
+import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
import org.opendaylight.protocol.framework.DeserializerException;
import org.opendaylight.protocol.framework.DocumentedException;
-import org.opendaylight.protocol.framework.ProtocolMessageFactory;
import org.opendaylight.protocol.util.ByteArray;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.linkstate.rev130918.LinkstateAddressFamily;
(byte) 0x40, (byte) 0x04, (byte) 0x00, (byte) 0x47, (byte) 0x02, (byte) 0x06, (byte) 0x01, (byte) 0x04, (byte) 0x00,
(byte) 0x01, (byte) 0x00, (byte) 0x01 };
- final ProtocolMessageFactory<Notification> factory = BGPMessageFactoryImpl.getInstance();
+ final MessageRegistry factory =
+ SingletonProviderContext.getInstance().getMessageRegistry();
@Test
public void testHeaderErrors() throws DeserializerException, DocumentedException {
(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0x00 };
wrong = ByteArray.cutBytes(wrong, 16);
try {
- this.factory.parse(wrong);
+ this.factory.parseMessage(wrong);
fail("Exception should have occcured.");
} catch (final IllegalArgumentException e) {
assertEquals("Too few bytes in passed array. Passed: " + wrong.length + ". Expected: >= 19.", e.getMessage());
(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
(byte) 0x00, (byte) 0x13, (byte) 0x08 };
try {
- this.factory.parse(bytes);
+ this.factory.parseMessage(bytes);
fail("Exception should have occured.");
} catch (final DocumentedException e) {
assertEquals(BGPError.BAD_MSG_TYPE, ((BGPDocumentedException) e).getError());
@Test
public void testKeepAliveMsg() throws DeserializerException, DocumentedException {
final Notification keepAlive = new KeepaliveBuilder().build();
- final byte[] bytes = this.factory.put(keepAlive);
+ final byte[] bytes = this.factory.serializeMessage(keepAlive);
assertArrayEquals(keepAliveBMsg, bytes);
- final Notification m = this.factory.parse(bytes).get(0);
+ final Notification m = this.factory.parseMessage(bytes);
assertTrue(m instanceof Keepalive);
}
(byte) 0x00, (byte) 0x14, (byte) 0x04, (byte) 0x05 };
try {
- this.factory.parse(bytes);
+ this.factory.parseMessage(bytes);
fail("Exception should have occured.");
} catch (final DocumentedException e) {
assertThat(e.getMessage(), containsString("Message length field not within valid range."));
public void testOpenMessage() throws UnknownHostException, DeserializerException, DocumentedException {
final Notification open = new OpenBuilder().setMyAsNumber(100).setHoldTimer(180).setBgpIdentifier(new Ipv4Address("20.20.20.20")).setVersion(
new ProtocolVersion((short) 4)).build();
- final byte[] bytes = this.factory.put(open);
+ final byte[] bytes = this.factory.serializeMessage(open);
assertArrayEquals(openBMsg, bytes);
- final Notification m = this.factory.parse(bytes).get(0);
+ final Notification m = this.factory.parseMessage(bytes);
assertTrue(m instanceof Open);
assertEquals(100, ((Open) m).getMyAsNumber().intValue());
(byte) 0x14, (byte) 0x14, (byte) 0x14, (byte) 0x00 };
try {
- this.factory.parse(bMsg);
+ this.factory.parseMessage(bMsg);
fail("Exception should have occured.");
} catch (final DocumentedException e) {
assertEquals("Hold time value not acceptable.", e.getMessage());
(byte) 0xff, (byte) 0xff };
try {
- this.factory.parse(bMsg);
+ this.factory.parseMessage(bMsg);
fail("Exception should have occured.");
} catch (final DocumentedException e) {
assertEquals("Open message too small.", e.getMessage());
(byte) 0x14, (byte) 0x14, (byte) 0x14, (byte) 0x00 };
try {
- this.factory.parse(bMsg);
+ this.factory.parseMessage(bMsg);
fail("Exception should have occured.");
} catch (final DocumentedException e) {
assertEquals("BGP Protocol version 8 not supported.", e.getMessage());
public void testNotificationMsg() throws DeserializerException, DocumentedException {
Notification notMsg = new NotifyBuilder().setErrorCode(BGPError.OPT_PARAM_NOT_SUPPORTED.getCode()).setErrorSubcode(
BGPError.OPT_PARAM_NOT_SUPPORTED.getSubcode()).setData(new byte[] { 4, 9 }).build();
- byte[] bytes = this.factory.put(notMsg);
+ byte[] bytes = this.factory.serializeMessage(notMsg);
assertArrayEquals(notificationBMsg, bytes);
- Notification m = this.factory.parse(bytes).get(0);
+ Notification m = this.factory.parseMessage(bytes);
assertTrue(m instanceof Notify);
assertEquals(BGPError.OPT_PARAM_NOT_SUPPORTED, BGPError.forValue(((Notify) m).getErrorCode(), ((Notify) m).getErrorSubcode()));
notMsg = new NotifyBuilder().setErrorCode(BGPError.CONNECTION_NOT_SYNC.getCode()).setErrorSubcode(
BGPError.CONNECTION_NOT_SYNC.getSubcode()).build();
- bytes = this.factory.put(notMsg);
+ bytes = this.factory.serializeMessage(notMsg);
- m = this.factory.parse(bytes).get(0);
+ m = this.factory.parseMessage(bytes);
assertTrue(m instanceof Notify);
assertEquals(BGPError.CONNECTION_NOT_SYNC, BGPError.forValue(((Notify) m).getErrorCode(), ((Notify) m).getErrorSubcode()));
(byte) 0x00, (byte) 0x14, (byte) 0x03, (byte) 0x02 };
try {
- this.factory.parse(bMsg);
+ this.factory.parseMessage(bMsg);
fail("Exception should have occured.");
} catch (final DocumentedException e) {
assertEquals("Notification message too small.", e.getMessage());
(byte) 0x00, (byte) 0x15, (byte) 0x03, (byte) 0x02, (byte) 0xaa };
try {
- this.factory.parse(bMsg);
+ this.factory.parseMessage(bMsg);
fail("Exception should have occured.");
} catch (final IllegalArgumentException e) {
assertEquals("BGP Error code 2 and subcode 170 not recognized.", e.getMessage());
final Open open = new OpenBuilder().setMyAsNumber(72).setHoldTimer(180).setBgpIdentifier(new Ipv4Address("172.20.160.170")).setVersion(
new ProtocolVersion((short) 4)).setBgpParameters(tlvs).build();
- final byte[] result = this.factory.put(open);
+ final byte[] result = this.factory.serializeMessage(open);
// the capabilities can be swapped.
assertTrue(Arrays.equals(openWithCpblt1, result) || Arrays.equals(openWithCpblt2, result));
import org.opendaylight.protocol.bgp.parser.BGPError;
import org.opendaylight.protocol.bgp.parser.BGPSessionListener;
import org.opendaylight.protocol.bgp.parser.impl.BGPMessageFactoryImpl;
+import org.opendaylight.protocol.bgp.parser.impl.SingletonProviderContext;
import org.opendaylight.protocol.bgp.rib.impl.BGP;
import org.opendaylight.protocol.concepts.ListenerRegistration;
import org.opendaylight.protocol.framework.DeserializerException;
private List<Notification> parsePrevious(final List<byte[]> msgs) {
final List<Notification> messages = Lists.newArrayList();
- final ProtocolMessageFactory<Notification> parser = BGPMessageFactoryImpl.getInstance();
+ final ProtocolMessageFactory<Notification> parser = new BGPMessageFactoryImpl(
+ SingletonProviderContext.getInstance().getMessageRegistry());
try {
for (final byte[] b : msgs) {
import org.opendaylight.protocol.bgp.parser.BGPSessionListener;
import org.opendaylight.protocol.bgp.parser.impl.BGPMessageFactoryImpl;
+import org.opendaylight.protocol.bgp.parser.impl.SingletonProviderContext;
import org.opendaylight.protocol.bgp.rib.impl.BGPDispatcherImpl;
import org.opendaylight.protocol.bgp.rib.impl.BGPSessionProposalImpl;
import org.opendaylight.protocol.bgp.rib.impl.spi.BGPSessionPreferences;
BGPDispatcherImpl dispatcher;
public Main() throws IOException {
- this.dispatcher = new BGPDispatcherImpl(BGPMessageFactoryImpl.getInstance());
+ this.dispatcher = new BGPDispatcherImpl(new BGPMessageFactoryImpl(SingletonProviderContext.getInstance().getMessageRegistry()));
}
public static void main(final String[] args) throws NumberFormatException, IOException {
import org.opendaylight.protocol.bgp.parser.BGPSessionListener;
import org.opendaylight.protocol.bgp.parser.impl.BGPMessageFactoryImpl;
+import org.opendaylight.protocol.bgp.parser.impl.SingletonProviderContext;
import org.opendaylight.protocol.bgp.rib.impl.BGPHandlerFactory;
import org.opendaylight.protocol.bgp.rib.impl.BGPSessionImpl;
import org.opendaylight.protocol.bgp.rib.impl.BGPSessionNegotiatorFactory;
final SessionNegotiatorFactory<Notification, BGPSessionImpl, BGPSessionListener> snf = new BGPSessionNegotiatorFactory(new HashedWheelTimer(), prefs);
final BGPSpeakerMock<Notification, BGPSessionImpl, BGPSessionListener> mock = new BGPSpeakerMock<>(snf,
- new BGPHandlerFactory(BGPMessageFactoryImpl.getInstance()),
+ new BGPHandlerFactory(new BGPMessageFactoryImpl(SingletonProviderContext.getInstance().getMessageRegistry())),
new DefaultPromise<BGPSessionImpl>(GlobalEventExecutor.INSTANCE));
mock.createServer(new InetSocketAddress("127.0.0.2", 12345), f);