Compare commits
No commits in common. "master" and "update" have entirely different histories.
20 changed files with 49 additions and 172 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
@ -1,6 +1,8 @@
|
||||||
# object files/output directories
|
# executables
|
||||||
|
moxerver
|
||||||
|
|
||||||
|
# object files
|
||||||
*.o
|
*.o
|
||||||
*.dir
|
|
||||||
|
|
||||||
# logs directory during development
|
# logs directory during development
|
||||||
logs
|
logs
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
language: cpp
|
|
||||||
|
|
||||||
compiler:
|
|
||||||
- gcc
|
|
||||||
- clang
|
|
||||||
|
|
||||||
script: make install
|
|
61
Makefile
61
Makefile
|
@ -1,38 +1,43 @@
|
||||||
# components
|
# target name
|
||||||
SERVER = moxerver
|
TARGET = moxerver
|
||||||
TOOLS = tools
|
|
||||||
|
|
||||||
# system install root directory
|
# special include directories
|
||||||
INSTALL_ROOT = $(abspath ./install.dir)
|
INCDIRS = -I.
|
||||||
|
# special library directories
|
||||||
|
LIBDIRS = -L.
|
||||||
|
# used libraries
|
||||||
|
#LIBS = -lm
|
||||||
|
LIBS = -lpthread
|
||||||
|
|
||||||
# prefix for /bin directory
|
# compiler and flags
|
||||||
BIN_PREFIX = /usr
|
CC = gcc
|
||||||
|
CFLAGS = -Wall $(INCDIRS) $(LIBDIRS) $(LIBS)
|
||||||
|
|
||||||
# ==============================================================================
|
# objects are .o files created from all .c files in the directory (same name)
|
||||||
|
OBJECTS = $(patsubst %.c,%.o,$(wildcard *.c))
|
||||||
|
# headers are all .h files in the directory
|
||||||
|
HEADERS = $(wildcard *.h)
|
||||||
|
|
||||||
# directories used for local component builds
|
# all objects are built from their .c files and all headers in the directory
|
||||||
BUILDDIR = build.dir
|
%.o: %.c $(HEADERS)
|
||||||
# directory configuration for local component builds
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
DIR_CONFIG = BUILDDIR=$(BUILDDIR) INSTALLDIR=$(INSTALL_ROOT) BIN_PREFIX=$(BIN_PREFIX)
|
|
||||||
|
|
||||||
# ==============================================================================
|
# target is built from all object files
|
||||||
|
$(TARGET): $(OBJECTS)
|
||||||
|
$(CC) $(OBJECTS) $(CFLAGS) -o $@
|
||||||
|
|
||||||
# supported make options (clean, install...)
|
|
||||||
.PHONY: default install clean
|
|
||||||
|
|
||||||
# default builds components
|
# support for default, clean and all options
|
||||||
default:
|
.PHONY: default all clean
|
||||||
cd $(SERVER) && make $(DIR_CONFIG)
|
|
||||||
cd $(TOOLS) && make $(DIR_CONFIG)
|
|
||||||
|
|
||||||
# install handles component installation
|
# all calls all other options
|
||||||
install: default
|
all: default
|
||||||
mkdir -p $(INSTALL_ROOT)
|
|
||||||
cd $(SERVER) && make install $(DIR_CONFIG)
|
|
||||||
cd $(TOOLS) && make install $(DIR_CONFIG)
|
|
||||||
|
|
||||||
# clean removes build and install results
|
# default builds target
|
||||||
|
default: $(TARGET)
|
||||||
|
|
||||||
|
# clean removed object files and target
|
||||||
clean:
|
clean:
|
||||||
cd $(SERVER) && make clean $(DIR_CONFIG)
|
-rm -f *.o
|
||||||
cd $(TOOLS) && make clean $(DIR_CONFIG)
|
-rm -f $(TARGET)
|
||||||
-rm -rf $(INSTALL_ROOT)
|
|
||||||
|
|
34
README.md
34
README.md
|
@ -1,40 +1,16 @@
|
||||||
[](https://travis-ci.org/socec/moxanix)
|
moxanix
|
||||||
|
|
||||||
Moxanix
|
|
||||||
=======
|
=======
|
||||||
|
|
||||||
A serial device server, provides console access to multiple serial devices through telnet connection.
|
A serial device server, provides console access to multiple serial devices through telnet connection.
|
||||||
|
|
||||||
Architecture
|
|
||||||
============
|
|
||||||
|
|
||||||
The serial device server is broken down into multiple micro servers dedicated to a single serial device and TCP port pair.
|
|
||||||
These micro servers are then managed by a control script. The control script allows the user to start and stop these micro servers or check their status.
|
|
||||||
Connections between serial devices and TCP ports are configured in a separate file.
|
|
||||||
This design allows scalability and customization based on the number of available serial connections and TCP port availability.
|
|
||||||
|
|
||||||
moxerver
|
moxerver
|
||||||
--------
|
--------
|
||||||
- a light server application handling the session between one TCP port and one serial device
|
- server application handling the session between a specific TCP port and a specific serial device
|
||||||
- allows bidirectional communication
|
- allows bidirectional communication
|
||||||
- it is expected to run a separate instance for every serial device and TCP port pair
|
- it is expected to run a separate instance for every serial device
|
||||||
|
|
||||||
moxerverctl
|
moxanix.sh
|
||||||
-----------
|
----------
|
||||||
- starts, stops or displays status for different moxervers
|
- starts, stops or displays status for different moxervers
|
||||||
- commands can handle one specific or all moxervers at once
|
- commands can handle one specific or all moxervers at once
|
||||||
|
|
||||||
moxerver.cfg
|
|
||||||
------------
|
|
||||||
- defines connections between serial devices and TCP ports
|
|
||||||
- each line corresponds to one micro server handling the defined connection
|
|
||||||
|
|
||||||
Build and install
|
|
||||||
=================
|
|
||||||
|
|
||||||
Run `make` to build the project and `make install` to install it.
|
|
||||||
This default build will produce artifacts in a directory "install.dir" with executables installed in "usr/bin" (default prefix is "usr").
|
|
||||||
|
|
||||||
You can install directly into some other directory with `make INSTALL_ROOT=/some/dir`.
|
|
||||||
You can change the default install prefix for executables with `make BIN_PREFIX=someprefix`.
|
|
||||||
These options can also be combined into `make INSTALL_ROOT=/some/dir BIN_PREFIX=someprefix`
|
|
||||||
|
|
|
@ -133,7 +133,7 @@ int client_ask_username(client_t *client)
|
||||||
|
|
||||||
/* show username request to the client */
|
/* show username request to the client */
|
||||||
snprintf(msg, BUFFER_LEN,
|
snprintf(msg, BUFFER_LEN,
|
||||||
"\nPlease provide a username to identify yourself to "
|
"\nPlease provide a username to identify yourself to"
|
||||||
"other users (max %d characters):\n", USERNAME_LEN);
|
"other users (max %d characters):\n", USERNAME_LEN);
|
||||||
client_write(client, msg, strlen(msg));
|
client_write(client, msg, strlen(msg));
|
||||||
|
|
14
tools/moxerverctl → moxanix.sh
Normal file → Executable file
14
tools/moxerverctl → moxanix.sh
Normal file → Executable file
|
@ -4,12 +4,10 @@
|
||||||
# setup
|
# setup
|
||||||
# =====
|
# =====
|
||||||
|
|
||||||
ROOT=""
|
|
||||||
|
|
||||||
# parameters
|
# parameters
|
||||||
CONFIGURATION_FILE="$ROOT/etc/moxerver.cfg"
|
CONFIGURATION_FILE="./moxanix.cfg"
|
||||||
SERVER_BINARY="moxerver"
|
SERVER_BINARY="./moxerver"
|
||||||
LOG_DIRECTORY="$ROOT/var/log/moxerver"
|
LOG_DIRECTORY="./logs"
|
||||||
|
|
||||||
|
|
||||||
# global variables for configuration
|
# global variables for configuration
|
||||||
|
@ -63,9 +61,9 @@ do_read_config()
|
||||||
# configuration lines
|
# configuration lines
|
||||||
CONF_LINES[$CONF_SIZE]=$(echo -n $line)
|
CONF_LINES[$CONF_SIZE]=$(echo -n $line)
|
||||||
# extract configuration arguments
|
# extract configuration arguments
|
||||||
tcp=$(echo $line | awk '{print $1}' | sed -e 's/tcp=//')
|
tcp=$(echo $line | awk '{print $1}' | tr -d "tcp=")
|
||||||
tty=$(echo $line | awk '{print $2}' | sed -e 's/tty=//')
|
tty=$(echo $line | awk '{print $2}' | tr -d "tty=")
|
||||||
baud=$(echo $line | awk '{print $3}' | sed -e 's/baud=//')
|
baud=$(echo $line | awk '{print $3}' | tr -d "baud=")
|
||||||
# compose configuration argument lines for passing to the servers
|
# compose configuration argument lines for passing to the servers
|
||||||
CONF_ARGS[$CONF_SIZE]="-p $tcp -t $tty -b $baud"
|
CONF_ARGS[$CONF_SIZE]="-p $tcp -t $tty -b $baud"
|
||||||
# increment configuration size (array index)
|
# increment configuration size (array index)
|
|
@ -1,65 +0,0 @@
|
||||||
# target names
|
|
||||||
TARGET_BINARY = moxerver
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
# directory for build results
|
|
||||||
BUILDDIR = $(abspath build.dir)
|
|
||||||
# installation root
|
|
||||||
INSTALLDIR = $(abspath install.dir)
|
|
||||||
# prefix for /bin directory
|
|
||||||
BIN_PREFIX = /usr
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
# add include directories
|
|
||||||
INCDIRS = -I.
|
|
||||||
# add library directories
|
|
||||||
LIBDIRS = -L.
|
|
||||||
# list used libraries
|
|
||||||
#LIBS = -lm
|
|
||||||
LIBS = -lpthread
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
# compiler and flags
|
|
||||||
CC = gcc
|
|
||||||
CFLAGS = -Wall $(INCDIRS) $(LIBDIRS) $(LIBS)
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
# build everything in a dedicated directory $(BUILDDIR)
|
|
||||||
|
|
||||||
# objects are .o files created from all .c files in the directory (same name)
|
|
||||||
OBJECTS = $(patsubst %.c, $(BUILDDIR)/%.o, $(wildcard *.c))
|
|
||||||
# headers are all .h files in the directory
|
|
||||||
HEADERS = $(wildcard *.h)
|
|
||||||
|
|
||||||
# all objects are built from their .c files in the directory
|
|
||||||
$(BUILDDIR)/%.o: %.c
|
|
||||||
mkdir -p $(BUILDDIR)
|
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
# target binary is built from all object files
|
|
||||||
$(BUILDDIR)/$(TARGET_BINARY): $(OBJECTS)
|
|
||||||
$(CC) $(OBJECTS) $(CFLAGS) -o $@
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
# supported make options (clean, install...)
|
|
||||||
.PHONY: all default install clean
|
|
||||||
|
|
||||||
# all calls all other options
|
|
||||||
all: default install
|
|
||||||
|
|
||||||
# default builds target
|
|
||||||
default: $(BUILDDIR)/$(TARGET_BINARY)
|
|
||||||
|
|
||||||
# install target binary
|
|
||||||
install: default
|
|
||||||
install -Dm0755 $(BUILDDIR)/$(TARGET_BINARY) $(INSTALLDIR)/$(BIN_PREFIX)/bin/$(TARGET_BINARY)
|
|
||||||
|
|
||||||
# clean removes object files and target (ignore errors with "-" before commands)
|
|
||||||
clean:
|
|
||||||
-rm -rf $(BUILDDIR)
|
|
||||||
-rm -rf $(INSTALLDIR)
|
|
|
@ -1,32 +0,0 @@
|
||||||
# target names
|
|
||||||
TARGET_CONTROL = moxerverctl
|
|
||||||
TARGET_CONFIG = moxerver.cfg
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
# directory for build results
|
|
||||||
BUILDDIR = $(abspath build.dir)
|
|
||||||
# installation root
|
|
||||||
INSTALLDIR = $(abspath install.dir)
|
|
||||||
# prefix for /bin directory
|
|
||||||
BIN_PREFIX = /usr
|
|
||||||
|
|
||||||
# ==============================================================================
|
|
||||||
|
|
||||||
# supported make options (clean, install...)
|
|
||||||
.PHONY: default install clean
|
|
||||||
|
|
||||||
# default does nothing
|
|
||||||
default:
|
|
||||||
|
|
||||||
# install targets
|
|
||||||
install:
|
|
||||||
# install configuration file
|
|
||||||
install -Dm0644 $(TARGET_CONFIG) $(INSTALLDIR)/etc/$(TARGET_CONFIG)
|
|
||||||
# install control script, referring to the configuration file
|
|
||||||
install -Dm0755 $(TARGET_CONTROL) $(INSTALLDIR)/$(BIN_PREFIX)/bin/$(TARGET_CONTROL)
|
|
||||||
sed -i -e 's#ROOT=\"\"#ROOT=$(INSTALLDIR)#' $(INSTALLDIR)/$(BIN_PREFIX)/bin/$(TARGET_CONTROL)
|
|
||||||
|
|
||||||
# clean removes object files and target (ignore errors with "-" before commands)
|
|
||||||
clean:
|
|
||||||
-rm -rf $(INSTALLDIR)
|
|
Loading…
Add table
Add a link
Reference in a new issue