Giter Site home page Giter Site logo

eipstackgroup / opener Goto Github PK

View Code? Open in Web Editor NEW
639.0 81.0 248.0 147.57 MB

OpENer is an EtherNet/IP stack for I/O adapter devices. It supports multiple I/O and explicit connections and includes objects and services for making EtherNet/IP-compliant products as defined in the ODVA specification.

License: Other

Shell 0.70% CMake 4.43% C 83.42% TeX 1.26% C++ 10.05% Batchfile 0.02% Python 0.11%
ethernet ethernetindustrialprotocol c cip commonindustrialprotocol

opener's Introduction

Quality Gate Status Join the chat at https://gitter.im/EIPStackGroupOpENer/Lobby

OpENer Version 2.3.0

Welcome to OpENer!

OpENer is an EtherNet/IP™ stack for I/O adapter devices; supports multiple I/O and explicit connections; includes objects and services to make EtherNet/IP™- compliant products defined in THE ETHERNET/IP SPECIFICATION and published by ODVA (http://www.odva.org).

Participate!

Users and developers of OpENer can join the respective Google Groups in order to exchange experience, discuss the usage of OpENer, and to suggest new features and CIP objects, which would be useful for the community.

Developers mailing list: https://groups.google.com/forum/#!forum/eip-stack-group-opener-developers

Users mailing list: https://groups.google.com/forum/#!forum/eip-stack-group-opener-users

Requirements:

OpENer has been developed to be highly portable. The default version targets PCs with a POSIX operating system and a BSD-socket network interface. To test this version we recommend a Linux PC or Windows with Cygwin (http://www.cygwin.com) installed. You will need to have the following installed:

  • CMake
  • gcc
  • make
  • binutils
  • the development library of libcap (libcap-dev or equivalient)

for normal building. These should be installed on most Linux installations and are part of the development packages of Cygwin.

If you want to run the unit tests you will also have to download CppUTest via https://github.com/cpputest/cpputest

For configuring the project we recommend the use of a CMake GUI (e.g., the cmake-gui package on Linux, or the Installer for Windows available at CMake)

Compile for Linux/POSIX:

  1. Make sure all the needed tools are available (CMake, make, gcc, binutils)
  2. Change to the /bin/posix
  3. For a standard configuration invoke setup_posix.sh
    1. Invoke the make command

    2. Invoking OpENer:

      ./src/ports/POSIX/OpENer <interface_name>

      e.g. ./src/ports/POSIX/OpENer eth1

OpENer also now has a real-time capable POSIX startup via the OpENer_RT option, which requires that the used kernel has the full preemptive RT patches applied and activated. If you want to use OpENer_RT, prior to step 2, execute sudo setcap cap_ipc_lock,cap_sys_nice+ep ./src/ports/POSIX/OpENer to grant OpENEr CAP_SYS_NICE, and the CAP_IPC_LOCK capabilities, which are needed for the RT mode

OpENer can also be built and installed as a library by setting the CMake flag -DOPENER_INSTALL_AS_LIB. To build a shared library, the global option -DBUILD_SHARED_LIBS=ON should also be set. It has only been tested under Linux/POSIX platform.

Compile for Windows XP/7/8 via Visual Studio:

  1. Invoke setup_windows.bat or configure via CMake
  2. Open Visual Studio solution OpENer.sln in bin/win32
  3. Compile OpENer by chosing Build All in Visual Studio
  4. For invoking OpENer type from the command line:
    1. Change to \bin\win32\src\ports\WIN32\

    2. Depending if you chose the Debug or Release configuration in Visual Studio, your executable will either show up in the subfolder Debug or Release

    3. Invoke OpENer via

      OpENer <interface_index>

      e.g. OpENer 3

In order to get the correct interface index enter the command route print in a command promt and search for the MAC address of your chosen network interface at the beginning of the output. The leftmost number is the corresponding interface index.

Compile for Windows XP/7/8/10 via Cygwin:

The POSIX setup file can be reused for Cygwin. Please note, that you cannot use RT mode and you will have to remove the code responsible for checking and getting the needed capabilities, as libcap is not available in Cygwin. The easier and more supported way to build OpENer for Windows is to either use MinGW or Visual Studio.

Compile for MinGW on Windows XP/7/8/10

  1. Make sure 64 bit mingw is installed. (Test with gcc --version, should show x86_64-posix-seh-rev1)
  2. Make sure CMake is installed. (Test with cmake --version, should be version 3.xx)
  3. Change to /bin/mingw
  4. Run the command setup_mingw.bat in a dos command line. (Not a bash shell). If tracing is desired, use the following (where the cmake parameter must be enclosed in quotes) or change the ./source/CMakeList.txt file.
    setup_mingw.bat "-DOpENer_TRACES:BOOL=TRUE"
    
  5. Run the command "make" from the same directory (./bin/mingw)
  6. The opener.exe is now found in \bin\mingw\src\ports\MINGW
  7. Start it like this: "opener 192.168.250.22", where the ip address is the local computer's address on the nettwork you want to use.

Directory structure:

  • bin ... The resulting binaries and make files for different ports
  • doc ... Doxygen generated documentation (has to be generated for the SVN version) and Coding rules
  • data ... EDS file for the default application
  • source
    • src ... the production source code
      • cip ... the CIP layer of the stack
      • cip_objects ... additional CIP objects
      • enet_encap ... the Ethernet encapsulation layer
      • ports ... the platform specific code
      • utils ... utility functions
    • tests ... the test source code
      • enet_encap ... tests for Ethernet encapsulation layer
      • utils ... tests for utility functions

Documentation:

The documentation of the functions of OpENer is part of the source code. The source packages contain the generated documentation in the directory doc/api_doc. If you use the GIT version you will need the program Doxygen for generating the HTML documentation. You can generate the documentation by invoking doxygen from the command line in the opener main directory.

Fuzzing

Intro

Fuzzing is an automated testing method that directs varying input data to a program in order to monitor output. It is a way to test for overall reliability as well as identify potential security bugs.

The fuzzer we are using is AFL, a fuzzer that uses runtime guided techniques to create input for the tested program. From a high-level prespective AFL works as follows:

  • Forks the fuzzed process
  • Genereates a new test case based on a predefined input
  • Feeds the fuzzed process with the test case through STDIN
  • Monitors the execution and registers which paths are reachable

Alt text

Compile

To start fuzzing this project with AFL you'll need to compile it with AFL. First make sure you have AFL installed:

sudo apt install build-essential
wget http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz
tar xzf afl-latest.tgz
cd afl*
make && sudo make install
echo "AFL is ready at: $(which afl-fuzz)"

Then, compile OpENer with AFL:

  1. Change to the OpENer/bin/posix directory
  2. Compile OpENer with AFL ./setup_posix_fuzz_afl.sh
  3. Run make

Fuzz

Finally, generate some test cases and start AFL:

# Generate inputs
mkdir inputs
echo 630000000000000000000000000000000000000000000000 | xxd -r -p > ./inputs/enip_req_list_identity
# You can also use the inputs we prepared from OpENer/fuzz/inputs
# Finally, let's fuzz!
afl-fuzz -i inputs -o findings ./src/ports/POSIX/OpENer <interface_name>

Reproduce a crash

Usually to reproduce a crash it's enough to retransmit the testcase using cat testcase | nc IP_ADDR 44818 However, since CIP runs over the EtherNet/IP layer, it must first register a valid session. Therefore, we need to use a dedicated script: python fuzz/scripts/send_testcase.py IP testcase_path

Running an OpENer "swarm":

  1. Create a macvlan network for this purpose and tie it to the desired eth port. Specify the IP range and use aux address to exclude the addresses used by other devices in the subnet such as the IP of the EIP scanner PC, network bridge, etc.: docker network create -d macvlan --subnet=192.168.135.253/24 --ip-range=192.168.135.100/24 --aux-address="PC1=192.168.135.250" --aux-address="VM=192.168.135.252" --aux-address="BR=192.168.135.253" -o parent=eth2 mac_vlan_network

Check the network you created with: docker network inspect mac_vlan_network

The network will assign IP's to the docker containers and an external scanner will be able to communicate with them. To access the containers from inside the docker host, you will have to create a bridge.

  1. Create a Dockerfile. This uses Ubuntu as the base image. It will copy OpENer to the image root and install the required packages. Lastly run OpENer on eth0 of the image: #Filename: Dockerfile FROM ubuntu:20.04 ADD ./bin/posix/src/ports/POSIX/OpENer / RUN apt-get update && apt-get install -y --no-install-recommends libcap-dev nmap ENTRYPOINT ["./OpENer", "eth0"]

  2. Create a docker-compose.yml that will let you connect the macvlan network to the containers and easily build them and tear them down: version: "3.3" services: dockerimagename: network_mode: mac_vlan_network image: dockeruser/dockerimagename

Note that to login to a running container, you have to expose a port in the dockerfile and dockercompose files and set up a network bridge.

Docker commands to start and stop multiple instances of the OpENer containers: Start up 128 docker image instances: docker-compose up --scale dockerimagename=128 -d Shut down all the instances: docker-compose down

Porting OpENer:

For porting OpENer to new platforms please see the porting section in the Doxygen documentation.

Contributing to OpENer:

The easiest way is to fork the repository, then create a feature/bugfix branch. After finishing your feature/bugfix create a pull request and explain your changes. Also, please update and/or add doxygen comments to the provided code sections. Please stick to the coding conventions, as defined in source/doc/coding_rules The easiest way to conform to the indenting convertion is to set uncrustify as git filter in the OpENer repository, which can be done with the following to commands:

git config filter.uncrustify.clean "/path/to/uncrustify/uncrustify -c uncrustify.cfg --mtime --no-backup"

git config filter.uncrustify.smudge "cat"

opener's People

Contributors

archi-tekt avatar azoitl avatar bvanhauwaert avatar cperrysfl avatar dependabot[bot] avatar gitter-badger avatar iseals avatar jkorbelra avatar jkvatne avatar jvalenzuela avatar martinmelikmerkumians avatar matthewkinsman avatar micsat avatar peda1337 avatar peterchristen577 avatar pogojotz avatar ralfbrandt avatar rubensolozabal avatar scottnewell avatar sharifuddinamin avatar sharonbrizinov avatar stm-at-esd avatar tlewiscpp avatar troglobit avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

opener's Issues

Create a custom CIP Object

Are there any examples of how to create a custom CIP Object with some simple attributes like an integer and a service which could write an integer value from a PLC to that object?

Molex Tools: EIP_Tool.exe cannot fetch even simple attributes from OpENer

Molex_EIPTool_V2_3(ODVA).zip

The executable in this download from Molex cannot retrieve any attributes from the POSIX sample application in the pristine download of current github repo.

Wireshark shows that a seemingly decent reply is being generated, but Molex V2.3.0 build 3 shows

Status: Driver Status = 33 (Timeout)

Anyone know why EIP_Tool is not happy with something so simple? Neither UCMM nor Connected attribute retrieval work. Wireshark shows the reply as "Success".

Some guidance would be much appreciated.

EIP Scanner ?

Hi all,
I want to bring up this issue again!

Is there any experience to use the OpENer Stack as base for a master/scanner implementation as well. Has anybody started already such a project. Maybe we could collaborate!

Beginning of 2016 we want to start an Ethernet/IP device/adapter project.
My experience with other stack porting projects tells me, that it would be better to have source codes on both sides. I would want to create a demo scanner implementation for Windows/PC mainly for testing our adapter implementation (e.g. we would be able to generate wrong telegrams to improve the robustness of our code)
Many thanks

gcc options change

The attached patch changes CMAKE_C_FLAGS in the following way:

  1. remove -w which quiets all warning and causes function prototypes to be ineffective. That basically renders all *.h files almost useless, except for structure declarations.

  2. removes -DCMAKE_EXPORT_COMPILE_COMMANDS=ON which is not a compiler option, so should not be passed to gcc. Nor is it tested in the C source by the preprocessor.

cmake.patch.txt

Using OpENer-1.2

Does any one have detailed instructions on using OpENer? I looking gather data from two laser doppler sensors.

C++ branch

Hi Martin and others,

I have a C++ branch that I will be maintaining. I prefer C++ to C, and I prefer a different formatting style for trees that I will be working on extensively. As a first step, the branch merely compiles with the C++ compiler. Its only build target is libeip.a, a static library that can be referenced in higher level projects. This branch brings in uncrustify.cfg which is the same used by the KiCad project. The uncrustify C/C++ beautifier tool is kept at github and Ben has done a great job on it and continues to do so.

The name of the branch is "cplusplus" here:

https://github.com/liftoff-sr/OpENer/tree/cplusplus

I expect that this is where I invest most of my efforts, but am happy to continue sharing obvious improvements to the C version when that can be done by referencing stuff in this branch.

C++ is available on even the smallest microcomputers now. The entire Arduino movement proves this, as does mbed. Type-safe linkage, and STL make this a sensible choice moving forward in most any embedded space. This is just my opinion, after working in C for 35 years, and in C++ for 29 years.

If you have an interest in helping with this branch, let me know please. I think as of now, it still compiles with the C compiler as well as the C++ compiler. But that is a short term situation.

Queries: OpENer with Allen-Bradley PLC

#1 Does this implementation also support ControlNet, DeviceNet in addition to the Ethernet/IP stack?
#2 What do 'ip address' and 'hostaddress' in the OpeNER command line tool correspond to?
#3 Are there any example configurations that I can try with an Allen-Bradley PLC?

win32 networkhandler broken

The last merge has broken networkhandler on win32. the follwoing line is missing:
res = select(fdmax + 1, &read_fds, 0, 0, &tv);

Windows port doesn't build 'out of the box'

I am attempting to build OpENer on cygwin.
./setup_windows.bat works
./make fails with the error shown below.

Any ideas what I'm doing wrong/have overlooked?

The toolset I'm using is as follows
cmake 3.3.2
gcc 5.4.0
make 4.2.1

[ 3%] Building C object src/cip/CMakeFiles/CIP.dir/appcontype.c.o
In file included from /c/proj/OpENer.git/OpENer/source/src/cip/cipconnectionmanager.h:10:0,
from /c/proj/OpENer.git/OpENer/source/src/cip/appcontype.h:9,
from /c/proj/OpENer.git/OpENer/source/src/cip/appcontype.c:9:
/c/proj/OpENer.git/OpENer/source/src/opener_api.h:421:34: warning: ‘struct sockaddr_in’ declared inside parameter list
int number_of_remaining_bytes, int unicast);
^
/c/proj/OpENer.git/OpENer/source/src/opener_api.h:421:34: warning: its scope is only this definition or declaration, which is probably not what you want
/c/proj/OpENer.git/OpENer/source/src/opener_api.h:437:36: warning: ‘struct sockaddr_in’ declared inside parameter list
struct sockaddr_in *from_address);
^
/c/proj/OpENer.git/OpENer/source/src/opener_api.h:631:28: warning: ‘struct sockaddr_in’ declared inside parameter list
struct sockaddr_in *socket_data);
^
/c/proj/OpENer.git/OpENer/source/src/opener_api.h:644:13: warning: ‘struct sockaddr_in’ declared inside parameter list
EipUint16 data_length);
^
In file included from /c/proj/OpENer.git/OpENer/source/src/cip/appcontype.h:9:0,
from /c/proj/OpENer.git/OpENer/source/src/cip/appcontype.c:9:
/c/proj/OpENer.git/OpENer/source/src/cip/cipconnectionmanager.h:202:22: error: field ‘remote_address’ has incomplete type
struct sockaddr_in remote_address; /
socket address for produce */

High CPU usage after the system time is changed

The following code from networkworkhandler.c consumes 100% of the CPU for some time after the system clock is advanced a lot (e.g. > 1 day).

  actualtime = getmilliseconds();
  TheNetworkStatus.elapsedtime += actualtime - lasttime;
  lasttime = actualtime;
 /* check if we had been not able to update the connection manager for several OPENER_TIMER_TICK.
   * This should compensate the jitter of the windows timer
   */
  while (TheNetworkStatus.elapsedtime >= OPENER_TIMER_TICK)
    {
      /* call manage_connections() in connection manager every OPENER_TIMER_TICK ms */
      manageConnections();
      TheNetworkStatus.elapsedtime -= OPENER_TIMER_TICK;
    }

Linking errors with VS 2005

Somehow the ost.io forums got deleted, therefore I re-post the request on ost.io from hlukeh:

hlukeh said:
I'm stuck. I have no idea how to link the application properly. No matter what I do I get link errors. 1>Linking... 1>DL100_1.obj : error LNK2019: unresolved external symbol "void __cdecl shutdownCIP(void)" (?shutdownCIP@@yaxxz) referenced in function "void __cdecl InitOpENer(void)" (?InitOpENer@@yaxxz) 1>DL100_1.obj : error LNK2019: unresolved external symbol "enum EIP_STATUS __cdecl NetworkHandler_Finish(void)" (?NetworkHandler_Finish@@ya?AW4EIP_STATUS@@xz) referenced in function "void __cdecl InitOpENer(void)" (?InitOpENer@@yaxxz) 1>DL100_1.obj : error LNK2019: unresolved external symbol "enum EIP_STATUS __cdecl NetworkHandler_ProcessOnce(void)" (?NetworkHandler_ProcessOnce@@ya?AW4EIP_STATUS@@xz) referenced in function "void __cdecl InitOpENer(void)" (?InitOpENer@@yaxxz) 1>DL100_1.obj : error LNK2019: unresolved external symbol "enum EIP_STATUS __cdecl NetworkHandler_Init(void)" (?NetworkHandler_Init@@ya?AW4EIP_STATUS@@xz) referenced in function "void __cdecl InitOpENer(void)" (?InitOpENer@@yaxxz) 1>DL100_1.obj : error LNK2019: unresolved external symbol "void __cdecl CIP_Init(unsigned short)" (?CIP_Init@@yaxg@Z) referenced in function "void __cdecl InitOpENer(void)" (?InitOpENer@@yaxxz) 1>DL100_1.obj : error LNK2019: unresolved external symbol "void __cdecl setDeviceSerialNumber(unsigned int)" (?setDeviceSerialNumber@@yaxi@Z) referenced in function "void __cdecl InitOpENer(void)" (?InitOpENer@@yaxxz) 1>DL100_1.obj : error LNK2019: unresolved external symbol "void __cdecl configureMACAddress(unsigned char const *)" (?configureMACAddress@@YAXPBE@Z) referenced in function "void __cdecl InitOpENer(void)" (?InitOpENer@@yaxxz) 1>DL100_1.obj : error LNK2019: unresolved external symbol "void __cdecl configureHostName(char const *)" (?configureHostName@@YAXPBD@Z) referenced in function "void __cdecl InitOpENer(void)" (?InitOpENer@@yaxxz) 1>DL100_1.obj : error LNK2019: unresolved external symbol "void __cdecl configureDomainName(char const *)" (?configureDomainName@@YAXPBD@Z) referenced in function "void __cdecl InitOpENer(void)" (?InitOpENer@@yaxxz) 1>DL100_1.obj : error LNK2019: unresolved external symbol "enum EIP_STATUS __cdecl configureNetworkInterface(char const *,char const *,char const *)" (?configureNetworkInterface@@ya?AW4EIP_STATUS@@PBD00@Z) referenced in function "void __cdecl InitOpENer(void)" (?InitOpENer@@yaxxz) Does anyone have any suggestions? Thanks

OpENer scanner help

Hello, I am re-posting this, as the ost.io page was somehow deleted

dacox said:
I am trying to interface with a PLC over Ethernet/IP as well, and came across this software package. Could you point me in the right direction for implementing scanner functionality on the PC(ie. another software package, etc.)? Does running the ./opener binary start an adapter?

How to connect and access my board to ab PLC using opener stack

I've ported this code to TIVA c connected launchpad and also provided static IP address

My question is how to connect this to ab PLC
And how to access this board from PLC lader logic
Require step by step procedure for connecting
I'm using ab compact logix 35e
And need procedure to include and access from PLC
Also how to create custom equipments
Need complete procedure for using this code
I want to send data from PLC to my board

Windows build is broken

Commit f023838 broke the win32 build. There were a number of renames done that affected header files for the win32 port, but were not performed in the win32 implementation files. The project is no longer buildable out of the box for windows.

Discontinuation of LM3S8962 port

As the LM3S8962 is not available anymore, I plan to discontinue the support for this chip. If anyone is making use of this port, please respond to this issue until 23th of November 2015

Delay time exceeds maximum for 1ms if rand() has max value

In the DetermineDelayTime function +1 is added to the randomized delay time. This is wrong for two reasons. First the Spec states that the delay time shall be between 0 and the max delay time, and second if the max delay time is the result of the randomization process, the allocated delay time will be 1ms larger than the allowed delay time.

Inconsistent code style

The OpENer code base has an inconsistent code style, both regarding formatting and naming convention. As Hunguarian notation is not really necessary nor recommended anymore, a change to the Google C++ code style is proposed

Clean Get/Set attribute service implementation

Since the transition form the mask based get/set attribute implementation to the trait controlled one, some functions still expose the interface of the mask based implementation. This has to be cleaned up

Implicit connection parameters

Hi,

I'm having trouble setting the parameters in an implicit connection. I managed to run a connection explicitly using the value 0x43f8 for o_to_t_network_connection_parameter and t_to_o_network_connection_parameter, but I dont find any info about how to define this parameter for implicit conection.

I need to configure an implicit conection to send data from EIPStack application to the client application.
Can you help me about that?

Regards!
Aitor

Edit: I found a way... I'm using EZ-EDS to configure eds files

[Connection Manager]
Revision = 1;
MaxInst = 10;
Number_Of_Static_Instances = 1;
Max_Number_Of_Dynamic_Instances = 1;
Connection1 =
0x82010002, $ 0-15 = supported transport classes
$ 16 = trigger: cyclic
$ 17 = trigger: change of state
$ 18 = trigger: application
$ 19-23 = trigger: reserved
$ 24 = application type: listen-only
$ 25 = application type: input-only
$ 26 = application type: exclusive-owner
$ 27 = application type: redundant-owner
$ 28-30 = reserved
$ 31 = Direction: Client = 0 / Server = 1
0x02210001, $ 0 = O->T fixed size supported
$ 1 = O->T variable size supported
$ 2 = T->O fixed size supported
$ 3 = T->O variable size supported
$ 4-5 = O->T number of bytes per slot (obsolete)
$ 6-7 = T->O number of bytes per slot (obsolete)
$ 8-10 = O->T Real time transfer format
$ 11 = reserved
$ 12-14 = T->O Real time transfer format
$ 15 = reserved
$ 16 = O->T connection type: NULL
$ 17 = O->T connection type: MULTICAST
$ 18 = O->T connection type: POINT2POINT
$ 19 = O->T connection type: reserved
$ 20 = T->O connection type: NULL
$ 21 = T->O connection type: MULTICAST
$ 22 = T->O connection type: POINT2POINT
$ 23 = T->O connection type: reserved
$ 24 = O->T priority: LOW
$ 25 = O->T priority: HIGH
$ 26 = O->T priority: SCHEDULED
$ 27 = O->T priority: reserved
$ 28 = T->O priority: LOW
$ 29 = T->O priority: HIGH
$ 30 = T->O priority: SCHEDULED
$ 31 = T->O priority: reserved
1000000,38,Param1, $ O->T RPI, size, format
1000000,38,Param1, $ T->O RPI, size, format
,, $ proxy config size, format
,, $ target config size, format
"Input only connection",$ Connection Name
"", $ help string
"20 04 24 SLOT"; $ Path
I can define the forward open parameters with 0x82010002 << 8 | 0x02210001.
Now I can define target to originator implicit connection.

You can close the Issue.
Thanks!
Aitor

Compliance Test fails for Connection Manager / Unconnected Send

With issue #26 there was an updated implemented for "Unconnected Send" feature.
But this feature breaks the compliance test (CT). For the CT the new feature
"0x52 Unconnected_Send" was enabled too. And in this case the following errors occur:

STC File Error: Connection Manager Unconnected_Send supported and STC file does not indicate CIP routing support

STC indicates that Connection Manager Unconnected_Send service is implemented and test is unable to retrieve entry port. 'One instance of the Port object shall exist for each CIP routable port

It looks that the "CIP routing" and even the "Port" feature is needed for "Unconnected Send"?!

I think the patch from issue #26 should be removed.

EncodeEPath bug

Hi,
I found a bug into EncodeEPath function. In the second line you are trying to add 8 bit data like 16 bit, AddIntToMessage(epath->path_size, message).

If I'm not wrong epath->path_size is an unsigned short int.

I hope I have helped. Regards!
Aitor

Compliance Test fails for Assembly

With issue #24 there was an updated implemented for "Assembly" feature attribute 4.
But this feature breaks the compliance test (CT).

Patch was send to CapXilinx.

Overhaul Forward Open / Forward Close

Due to changes in the CIP sepcification these services needs additional functionality, which is not easily achievable with only modifying the existing code. A new implementation is needed

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.