Hi Vlad,

Your code says TCP ... so it should work, if you use WireShark on the machine 
that is 
trying to connect to the remote you won't even need the promiscuous mode.


Chris


Am 17.09.20, 12:26 schrieb "Vladyslav Milutin" <v.milu...@aegas.io>:

    Hi Christofer,

    Thanks for your advice, I'm not sure that I can use wireshark in my case :(
    Thanks for your answers, I'll try to create a watchdog for it and look for
    the connection statuses.

    Kind regards,
    Vlad

    чт, 17 сент. 2020 г. в 13:02, Christofer Dutz <christofer.d...@c-ware.de>:

    > Hi Vlad,
    >
    > I didn't miss the email, but for me it's almost impossible to give you an
    > advice to what might be going wrong.
    > The error you are getting I usually got in the past as soon as I send out
    > something the PLC doesn't like.
    > Just recently when we didn't reset the message-id counters and they
    > overflowed, some PLCs just hung up.
    >
    > So what I would do, would be to use WireShark to check what's actually
    > going over the wire and to check if this is ok.
    > If it's not, well you know what to fix.
    >
    > Chris
    >
    >
    > Am 17.09.20, 11:56 schrieb "Vladyslav Milutin" <v.milu...@aegas.io>:
    >
    >     Hi guys,
    >
    >     I just will resend this message in case you missed it.
    >
    >     Hi guys,
    >
    >     I can send you this code, which doesn't have much business logic, and
    > all
    >     params are renamed.
    >
    >     public abstract class LalelDriver<T extends Message> extends
    >     GeneratedDriverBase<T> {
    >
    >         private final ChannelHandler handler;
    >
    >         @Override
    >         public String getProtocolName() {
    >             return "Lalel";
    >         }
    >
    >         @Override
    >         protected Class<? extends Configuration> getConfigurationType() {
    >             return LalelConfiguration.class;
    >         }
    >
    >         @Override
    >         protected String getDefaultTransport() {
    >             return "tcp";
    >         }
    >
    >         @Override
    >         protected boolean canSubscribe() {
    >             return true;
    >         }
    >
    >         @Override
    >         protected LalelFieldHandler getFieldHandler() {
    >             return new LalelFieldHandler();
    >         }
    >
    >         @Override
    >         protected void initializePipeline(ChannelFactory channelFactory) {
    >             try {
    >                 final Channel channel =
    >     channelFactory.createChannel(this.handler);
    >                 channelFactory.initializePipeline(channel.pipeline());
    >
    >             } catch (PlcConnectionException e) {
    >                 log.error("Failed to create channel");
    >             }
    >         }
    >     }
    >
    >     public classLalelDriverTcp extends LalelDriver<EthernetMessage> {
    >
    >         public LalelDriverTcp(final ChannelHandler handler){
    >             super(handler);
    >         }
    >
    >         @Override
    >         public String getProtocolCode() {
    >             return "lalel-tcp";
    >         }
    >
    >         @Override
    >         protected ProtocolStackConfigurer<EthernetMessage>
    > getStackConfigurer()
    >     {
    >             return DriverUtils.buildStackConfigurer(
    >                     EthernetMessage.class, EthernetMessageIO.class,
    >                     LalelProtocolLogicTcp.class, ByteLengthEstimator.class
    >             );
    >         }
    >
    >         /**
    >          * Estimate the Length of a Packet
    >          */
    >         public static class ByteLengthEstimator implements
    >     ToIntFunction<ByteBuf> {
    >             @Override
    >             public int applyAsInt(ByteBuf byteBuf) {
    >                 if (byteBuf.readableBytes() >= 2) {
    >                     return
    > byteBuf.getUnsignedShortLE(byteBuf.readerIndex());
    >                 }
    >                 return -1;
    >             }
    >         }
    >
    >     }
    >
    >     And connection code:
    >
    >             this.connection = driver.getConnection(connectionString);
    >
    >             this.connection.connect();
    >
    >
    >     Kind regards,
    >     Vlad
    >
    >
    >     Kind regards,
    >     Vlad
    >
    >     чт, 17 сент. 2020 г. в 12:09, Christofer Dutz <
    > christofer.d...@c-ware.de>:
    >
    >     > Hi Vlad,
    >     >
    >     > 0.8.0-SNAPSHOT is the current development version ...
    >     > we'll be releasing that as soon as we tied up some things we're
    > currently
    >     > working on.
    >     >
    >     > Chris
    >     >
    >     >
    >     >
    >     > Am 17.09.20, 11:02 schrieb "Vladyslav Milutin" <v.milu...@aegas.io>:
    >     >
    >     >     Hi Stefano,
    >     >
    >     >     I'm curious about the 0.8.0 version, where I can find it? Since
    > maven
    >     > repo
    >     >     contains the latest version 0.7.0.
    >     >
    >     >     Kind regards,
    >     >     Vlad
    >     >
    >     >     ср, 16 сент. 2020 г. в 17:30, Stefano Bossi <
    > stefano.bo...@gmail.com>:
    >     >
    >     >     > Hi Vlad,
    >     >     >
    >     >     > this seems similar to a bug fixed some time ago, I am not
    > really
    >     > sure but
    >     >     > it worth to try to use the 0.8.0 version where this fix is
    > present.
    >     >     >
    >     >     > You should try to build the version and here you could fine
    > some
    >     > help:
    >     >     > https://plc4x.apache.org/developers/index.html
    >     >     >
    >     >     > Regards,
    >     >     > Stefano
    >     >     >
    >     >     > On 16/09/2020 14:32, Vladyslav Milutin wrote:
    >     >     >
    >     >     > Hello guys,
    >     >     >
    >     >     > I'm writing to you with a hope that you can help me with
    > exception
    >     >     > handling.
    >     >     > Currently after a long time connection can be reset by peer.
    > See
    >     > stacktrace
    >     >     > below.
    >     >     >
    >     >     > I've tried to add a custom ChannelHandler which Overrides
    >     > exceptionCaught()
    >     >     > and add it in Driver#initializePipeline() see code below. Also
    > has
    >     > tried to
    >     >     > add a channel that can be obtained from
    > DefaultNettyPlcConnection.
    >     > And none
    >     >     > of them actualy was added to the pipeline where this exception
    > was
    >     > thrown.
    >     >     >
    >     >     > plc4x version: 0.7.0
    >     >     >
    >     >     > StatckTrace:
    >     >     > 2020-09-16 13:50:03.340 WARN  [nioEventLoopGroup-58-1]
    >     >     > [io.netty.channel.DefaultChannelPipeline]
    >     > onUnhandledInboundException - An
    >     >     > exceptionCaught() event was fired, and it reached at the tail
    > of the
    >     >     > pipeline. It usually means the last handler in the pipeline
    > did not
    >     > handle
    >     >     > the exception.
    >     >     > java.io.IOException: Connection reset by peer
    >     >     >   at java.base/sun.nio.ch.FileDispatcherImpl.read0(Native
    > Method)
    >     >     >   at java.base/sun.nio.ch
    >     > .SocketDispatcher.read(SocketDispatcher.java:39)
    >     >     >   at
    >     > java.base/sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:276)
    >     >     >   at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:233)
    >     >     >   at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:223)
    >     >     >   at java.base/sun.nio.ch
    >     > .SocketChannelImpl.read(SocketChannelImpl.java:358)
    >     >     >   at
    > io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:253)
    >     >     >   at
    >     > 
io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1133)
    >     >     >   at
    >     >     >
    >     >
    > 
io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350)
    >     >     >   at
    >     >     >
    >     >
    > 
io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148)
    >     >     >   at
    >     >     >
    >     >
    > 
io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)
    >     >     >   at
    >     >     >
    >     >
    > 
io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
    >     >     >   at
    >     >     >
    >     >
    > 
io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)
    >     >     >   at
    > io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
    >     >     >   at
    >     >     >
    >     >
    > 
io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
    >     >     >   at
    >     >     >
    >     >
    > io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    >     >     >   at
    >     >     >
    >     >
    > 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    >     >     >   at java.base/java.lang.Thread.run(Thread.java:834)
    >     >     >
    >     >     > Driver#initializePipeline:
    >     >     >         try {
    >     >     >             final Channel channel =
    >     >     > channelFactory.createChannel(this.handler);
    >     >     >
    >  channelFactory.initializePipeline(channel.pipeline());
    >     >     >
    >     >     >         } catch (PlcConnectionException e) {
    >     >     >             log.error("Failed to create channel");
    >     >     >         }
    >     >     >
    >     >     > ChannelHandler:
    >     >     >     @Override
    >     >     >     public void exceptionCaught(ChannelHandlerContext ctx,
    > Throwable
    >     > cause)
    >     >     > {
    >     >     >         log.warn("ExceptionCaught in worker: ctx = [{}], cause
    > =
    >     > [{}, {}],
    >     >     > workerName = [{}]",
    >     >     >                 ctx, cause.getClass(), cause.getMessage(),
    >     > workerName);
    >     >     >         if (cause instanceof ConnectTimeoutException) {
    >     >     >             log.warn("ConnectionTimeout caught: workerName =
    > [{}]",
    >     >     > workerName);
    >     >     >         }
    >     >     >         if ((cause instanceof IOException) &&
    >     >     > cause.getMessage().contains("Connection reset by peer")) {
    >     >     >             log.warn("Connection reset by peer caught:
    > workerName =
    >     > [{}]",
    >     >     > workerName);
    >     >     >         } else {
    >     >     >             log.info("Unexpected exception caught: workerName
    > =
    >     > [{}]",
    >     >     > workerName);
    >     >     >         }
    >     >     >
    >     >     >         this.callback.accept(cause);
    >     >     >     }
    >     >     >
    >     >     > DefaultNettyPlcConnection#channel:log.info("Trying to get
    >     > connection channel: worker name = [{}]",
    >     >     > this.workerName);
    >     >     >         final Channel channel = ((DefaultNettyPlcConnection)
    >     >     > this.connection).getChannel();
    >     >     >         log.info("Channel obtained successfully. Adding custom
    >     >     > channelHandler to it: channel = [{}], workerName = [{}]",
    > channel,
    >     >     > this.workerName);
    >     >     >         channel.pipeline().addLast(this.channelHandler);
    >     >     >         log.info("ChannelHandler added: channel = [{}],
    >     > channelHandler =
    >     >     > [{}], workerName = [{}]", channel, this.channelHandler,
    >     > this.workerName);
    >     >     >
    >     >     > Kind regards,
    >     >     > Vlad
    >     >     >
    >     >     >
    >     >     >
    >     >     >
    >     >
    >     >
    >
    >

Reply via email to