Search in sources :

Example 1 with LispMapRegister

use of org.onosproject.lisp.msg.protocols.LispMapRegister in project onos by opennetworkinglab.

the class LispMapServer method processMapRegister.

/**
 * Handles map-register message and replies with map-notify message.
 *
 * @param message map-register message
 * @return map-notify message
 */
LispMapNotify processMapRegister(LispMessage message) {
    LispMapRegister register = (LispMapRegister) message;
    if (!checkMapRegisterAuthData(register)) {
        log.warn(INVALID_AUTHENTICATION_DATA_MSG, "Map-Register");
        return null;
    }
    register.getMapRecords().forEach(mapRecord -> {
        LispEidRecord eidRecord = new LispEidRecord(mapRecord.getMaskLength(), mapRecord.getEidPrefixAfi());
        LispMapRecord oldMapRecord = mapDb.getMapRecordByEidRecord(eidRecord, register.isProxyMapReply());
        if (oldMapRecord == null) {
            mapDb.putMapRecord(eidRecord, mapRecord, register.isProxyMapReply());
        } else {
            if (oldMapRecord.getMapVersionNumber() <= mapRecord.getMapVersionNumber()) {
                mapDb.putMapRecord(eidRecord, mapRecord, register.isProxyMapReply());
                if (enableSmr) {
                    sendSmrMessage(eidRecord);
                }
            }
        }
    });
    // otherwise, we do not acknowledge back to ETR
    if (register.isWantMapNotify()) {
        NotifyBuilder notifyBuilder = new DefaultNotifyBuilder();
        notifyBuilder.withKeyId(authConfig.lispAuthKeyId());
        notifyBuilder.withAuthDataLength(valueOf(authConfig.lispAuthKeyId()).getHashLength());
        notifyBuilder.withAuthKey(authConfig.lispAuthKey());
        notifyBuilder.withNonce(register.getNonce());
        notifyBuilder.withMapRecords(register.getMapRecords());
        LispMapNotify notify = notifyBuilder.build();
        InetSocketAddress address = new InetSocketAddress(register.getSender().getAddress(), MAP_NOTIFY_PORT);
        notify.configSender(address);
        return notify;
    }
    return null;
}
Also used : NotifyBuilder(org.onosproject.lisp.msg.protocols.LispMapNotify.NotifyBuilder) DefaultNotifyBuilder(org.onosproject.lisp.msg.protocols.DefaultLispMapNotify.DefaultNotifyBuilder) LispMapRegister(org.onosproject.lisp.msg.protocols.LispMapRegister) LispMapNotify(org.onosproject.lisp.msg.protocols.LispMapNotify) InetSocketAddress(java.net.InetSocketAddress) LispMapRecord(org.onosproject.lisp.msg.protocols.LispMapRecord) DefaultNotifyBuilder(org.onosproject.lisp.msg.protocols.DefaultLispMapNotify.DefaultNotifyBuilder) LispEidRecord(org.onosproject.lisp.msg.protocols.LispEidRecord)

Example 2 with LispMapRegister

use of org.onosproject.lisp.msg.protocols.LispMapRegister in project onos by opennetworkinglab.

the class LispMapServer method checkMapRegisterAuthData.

/**
 * Checks the integrity of the received map-register message by calculating
 * authentication data from received map-register message.
 *
 * @param register map-register message
 * @return evaluation result
 */
private boolean checkMapRegisterAuthData(LispMapRegister register) {
    RegisterBuilder registerBuilder = new DefaultRegisterBuilder();
    registerBuilder.withKeyId(register.getKeyId());
    registerBuilder.withAuthKey(authConfig.lispAuthKey());
    registerBuilder.withNonce(register.getNonce());
    registerBuilder.withIsProxyMapReply(register.isProxyMapReply());
    registerBuilder.withIsWantMapNotify(register.isWantMapNotify());
    registerBuilder.withMapRecords(register.getMapRecords());
    LispMapRegister authRegister = registerBuilder.build();
    return Arrays.equals(authRegister.getAuthData(), register.getAuthData());
}
Also used : LispMapRegister(org.onosproject.lisp.msg.protocols.LispMapRegister) RegisterBuilder(org.onosproject.lisp.msg.protocols.LispMapRegister.RegisterBuilder) DefaultRegisterBuilder(org.onosproject.lisp.msg.protocols.DefaultLispMapRegister.DefaultRegisterBuilder) DefaultRegisterBuilder(org.onosproject.lisp.msg.protocols.DefaultLispMapRegister.DefaultRegisterBuilder)

Example 3 with LispMapRegister

use of org.onosproject.lisp.msg.protocols.LispMapRegister in project onos by opennetworkinglab.

the class LispControllerImplTest method testLispMessagePopulate.

/**
 * Tests adding and removing LISP messages.
 */
@Test
public void testLispMessagePopulate() throws InterruptedException {
    RegisterBuilder registerBuilder = new DefaultRegisterBuilder();
    List<LispMapRecord> records = ImmutableList.of(getMapRecord(), getMapRecord());
    LispMapRegister register = registerBuilder.withIsProxyMapReply(true).withIsWantMapNotify(false).withKeyId((short) 1).withAuthKey("onos").withNonce(1L).withMapRecords(records).build();
    NotifyBuilder notifyBuilder = new DefaultNotifyBuilder();
    LispMapNotify notify = notifyBuilder.withKeyId((short) 1).withAuthKey("onos").withNonce(1L).withMapRecords(records).build();
    // Test the callback methods that contained in message listener is fired
    agent.processUpstreamMessage(routerId1, register);
    // Following line will be ignored
    agent.processUpstreamMessage(routerId1, notify);
    agent.processDownstreamMessage(routerId1, notify);
    // Following line will be ignored
    agent.processDownstreamMessage(routerId1, register);
    messageListener.waitUntilUpdateIsCalled();
    assertThat(messageListener.incomingMessages, hasSize(1));
    assertThat(messageListener.incomingMessages, hasItems(register));
    assertThat(messageListener.outgoingMessages, hasSize(1));
    assertThat(messageListener.outgoingMessages, hasItems(notify));
}
Also used : NotifyBuilder(org.onosproject.lisp.msg.protocols.LispMapNotify.NotifyBuilder) DefaultNotifyBuilder(org.onosproject.lisp.msg.protocols.DefaultLispMapNotify.DefaultNotifyBuilder) LispMapRegister(org.onosproject.lisp.msg.protocols.LispMapRegister) LispMapNotify(org.onosproject.lisp.msg.protocols.LispMapNotify) RegisterBuilder(org.onosproject.lisp.msg.protocols.LispMapRegister.RegisterBuilder) DefaultRegisterBuilder(org.onosproject.lisp.msg.protocols.DefaultLispMapRegister.DefaultRegisterBuilder) DefaultRegisterBuilder(org.onosproject.lisp.msg.protocols.DefaultLispMapRegister.DefaultRegisterBuilder) LispMapRecord(org.onosproject.lisp.msg.protocols.LispMapRecord) DefaultNotifyBuilder(org.onosproject.lisp.msg.protocols.DefaultLispMapNotify.DefaultNotifyBuilder) Test(org.junit.Test)

Aggregations

LispMapRegister (org.onosproject.lisp.msg.protocols.LispMapRegister)3 DefaultNotifyBuilder (org.onosproject.lisp.msg.protocols.DefaultLispMapNotify.DefaultNotifyBuilder)2 DefaultRegisterBuilder (org.onosproject.lisp.msg.protocols.DefaultLispMapRegister.DefaultRegisterBuilder)2 LispMapNotify (org.onosproject.lisp.msg.protocols.LispMapNotify)2 NotifyBuilder (org.onosproject.lisp.msg.protocols.LispMapNotify.NotifyBuilder)2 LispMapRecord (org.onosproject.lisp.msg.protocols.LispMapRecord)2 RegisterBuilder (org.onosproject.lisp.msg.protocols.LispMapRegister.RegisterBuilder)2 InetSocketAddress (java.net.InetSocketAddress)1 Test (org.junit.Test)1 LispEidRecord (org.onosproject.lisp.msg.protocols.LispEidRecord)1