From 9e6bd6fa74979a2c8b8edaffdebfcdc9371ea4e3 Mon Sep 17 00:00:00 2001 From: garciay Date: Tue, 1 Nov 2016 10:14:44 +0000 Subject: [PATCH] Add Marben UdpIp support --- .../etsi/its/adapter/layers/LayerFactory.java | 1 + .../its/adapter/layers/UdpIpMarbenLayer.java | 76 +++++++++++++++++++ 2 files changed, 77 insertions(+) create mode 100644 javasrc/adapter/org/etsi/its/adapter/layers/UdpIpMarbenLayer.java diff --git a/javasrc/adapter/org/etsi/its/adapter/layers/LayerFactory.java b/javasrc/adapter/org/etsi/its/adapter/layers/LayerFactory.java index b279d62ed..65ec1c681 100644 --- a/javasrc/adapter/org/etsi/its/adapter/layers/LayerFactory.java +++ b/javasrc/adapter/org/etsi/its/adapter/layers/LayerFactory.java @@ -43,6 +43,7 @@ public class LayerFactory { layers.put("UdpIp", UdpIpLayer.class); layers.put("UdpIpCSG", UdpIpCommsigniaLayer.class); layers.put("CSG", CommsigniaLayer.class); + layers.put("UdpIpMarben", UdpIpMarbenLayer.class); // layers.put("Loopback", LoopbackLayer.class); // layers.put("Debug", DebugLayer.class); diff --git a/javasrc/adapter/org/etsi/its/adapter/layers/UdpIpMarbenLayer.java b/javasrc/adapter/org/etsi/its/adapter/layers/UdpIpMarbenLayer.java new file mode 100644 index 000000000..c52cfb90e --- /dev/null +++ b/javasrc/adapter/org/etsi/its/adapter/layers/UdpIpMarbenLayer.java @@ -0,0 +1,76 @@ +package org.etsi.its.adapter.layers; + +import java.nio.ByteBuffer; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Stack; + +import org.etsi.common.ByteHelper; +import org.etsi.its.adapter.IManagementLayers; +import org.etsi.its.adapter.UdpMultiplexer; + +public class UdpIpMarbenLayer extends UdpIpLayer { + + // Marben 88:ceres 182:Jupiter VM32G + private static String UdpAddress = "192.168.7.182"; //"10.200.1.101"; // FIXME Use a generic way to retrieve UDP settings + + private static int UdpRecvPort = 3751; //18501; // FIXME Use a generic way to retrieve UDP settings + + private static int UdpSendPort = 3750; //18502; // FIXME Use a generic way to retrieve UDP settings + + private Map clientsToFrameTypes = new HashMap(); + + public UdpIpMarbenLayer(IManagementLayers management, Stack lowerStack) { + super(management, lowerStack); + UdpMultiplexer.getInstance().UdpAddress = UdpAddress; + UdpMultiplexer.getInstance().UdpRecvPort = UdpRecvPort; + UdpMultiplexer.getInstance().UdpSendPort = UdpSendPort; + } + + /* (non-Javadoc) + * @see org.etsi.its.adapter.layers.Layer#register(org.etsi.its.adapter.layers.Layer) + */ + @Override + public void register(Layer upperLayer) { + if(registeredUpperLayer == null) { + super.register(upperLayer); + // Workaround for Marben CAM send module + Map lowerInfo = new HashMap(); + lowerInfo.put(UdpMultiplexer.getInstance().UDP_PORT_KEY, new Integer(UdpRecvPort).toString()); + super.send(new byte[] { (byte)0xAA, (byte)0xAA, (byte)0xAA, (byte)0xAA }, lowerInfo); + } else { + super.register(upperLayer); + } + clientsToFrameTypes.put(this.toString(), upperLayerFrameType); + } + + /* (non-Javadoc) + * @see org.etsi.its.adapter.layers.Layer#unregister(org.etsi.its.adapter.layers.Layer) + */ + @Override + public void unregister(Layer upperLayer) { + super.unregister(upperLayer); + clientsToFrameTypes.remove(this.toString(), upperLayerFrameType); + } + + /* (non-Javadoc) + * @see org.etsi.its.adapter.layers.Layer#send(byte[], java.util.Map) + */ + @Override + public boolean send(byte[] message, Map params) { + System.out.println("UdpIpMarbenLayer.send: " + ByteHelper.byteArrayToString(message)); + + return super.send(message, params); // ML(Marben) : no lower header added + } + + public void receive(byte[] message, Map lowerInfo) { + + System.out.println("UdpIpMarbenLayer.run: Received packet " + ByteHelper.byteArrayToString(message)); + + lowerInfo.put(EthernetLayer.LINK_LAYER_DESTINATION, MAC_BROADCAST); + + registeredUpperLayer.receive(message, lowerInfo); // no MAC+LLC headers expected for Marben (ML) + } + +} -- GitLab