mirror of
https://github.com/genodelabs/genode.git
synced 2025-05-06 10:38:31 +00:00
Remove Noux networking support
Noux networking is not well tested and not in practical use. It also uses a number of deprecated libraries. Ref #2535 Fix #2955
This commit is contained in:
parent
0603481aaa
commit
1370fa7631
@ -3,7 +3,7 @@ build {
|
|||||||
app/sequence
|
app/sequence
|
||||||
drivers/timer
|
drivers/timer
|
||||||
lib/libc_noux
|
lib/libc_noux
|
||||||
noux/minimal
|
noux
|
||||||
noux-pkg/coreutils
|
noux-pkg/coreutils
|
||||||
server/vfs
|
server/vfs
|
||||||
lib/vfs/audit
|
lib/vfs/audit
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
if {[have_spec linux]} { puts "Run script does not support Linux"; exit 0 }
|
if {[have_spec linux]} { puts "Run script does not support Linux"; exit 0 }
|
||||||
|
|
||||||
set build_components {
|
set build_components {
|
||||||
core init noux/minimal lib/libc_noux app/cli_monitor test/bomb test/signal
|
core init noux lib/libc_noux app/cli_monitor test/bomb test/signal
|
||||||
test/resource_yield drivers/timer drivers/uart server/terminal_mux
|
test/resource_yield drivers/timer drivers/uart server/terminal_mux
|
||||||
server/terminal_log noux-pkg/vim
|
server/terminal_log noux-pkg/vim
|
||||||
}
|
}
|
||||||
|
@ -1 +0,0 @@
|
|||||||
3ca6fd9c7fde4057f10d597d6e9fb62371f09217
|
|
@ -1,7 +0,0 @@
|
|||||||
LICENSE := BSD
|
|
||||||
VERSION := 8.2.0
|
|
||||||
DOWNLOADS := etc.svn
|
|
||||||
|
|
||||||
URL(etc) := http://svn.freebsd.org/base/release/$(VERSION)/etc
|
|
||||||
REV(etc) := HEAD
|
|
||||||
DIR(etc) := src/noux-pkg/etc
|
|
@ -1 +0,0 @@
|
|||||||
246c70837772a85dbadb01537242adb020bcffed
|
|
@ -1,8 +0,0 @@
|
|||||||
LICENSE := GPLv2
|
|
||||||
VERSION := 2.8.8rel.2
|
|
||||||
DOWNLOADS := lynx.archive
|
|
||||||
|
|
||||||
URL(lynx) := ftp://ftp.invisible-island.net/lynx/tarballs/lynx$(VERSION).tar.gz
|
|
||||||
SHA(lynx) := 234c9dc77d4c4594ad6216d7df4d49eae3019a3880e602f39721b35b97fbc408
|
|
||||||
SIG(lynx) := ${URL(lynx)}.asc
|
|
||||||
DIR(lynx) := src/noux-pkg/lynx
|
|
@ -1 +0,0 @@
|
|||||||
466a032cb884bc2e28f6c3b9f40cf1ed22bd2c07
|
|
@ -1,8 +0,0 @@
|
|||||||
LICENSE := GPLv2
|
|
||||||
VERSION := 0.7.1
|
|
||||||
DOWNLOADS := netcat.archive
|
|
||||||
|
|
||||||
URL(netcat) := http://downloads.sourceforge.net/sourceforge/netcat/netcat-$(VERSION).tar.bz2
|
|
||||||
SHA(netcat) := b55af0bbdf5acc02d1eb6ab18da2acd77a400bafd074489003f3df09676332bb
|
|
||||||
DIR(netcat) := src/noux-pkg/netcat
|
|
||||||
|
|
@ -1 +0,0 @@
|
|||||||
52fee484002bd753d6bc6674b8b4d99aa498801e
|
|
@ -1,13 +0,0 @@
|
|||||||
LICENSE := BSD
|
|
||||||
VERSION := 7.1p1
|
|
||||||
DOWNLOADS := openssh.archive
|
|
||||||
|
|
||||||
URL(openssh) := http://artfiles.org/openbsd/OpenSSH/portable/openssh-$(VERSION).tar.gz
|
|
||||||
SHA(openssh) := fc0a6d2d1d063d5c66dffd952493d0cda256cad204f681de0f84ef85b2ad8428
|
|
||||||
SIG(openssh) := ${URL(openssh)}.asc
|
|
||||||
KEY(openssh) := 3981992A1523ABA079DBFC66CE8ECB0386FF9C48
|
|
||||||
DIR(openssh) := src/noux-pkg/openssh
|
|
||||||
|
|
||||||
PATCHES := $(addprefix ${DIR(openssh)}/,\
|
|
||||||
$(notdir $(wildcard $(REP_DIR)/${DIR(openssh)}/*.patch)))
|
|
||||||
PATCH_OPT := -N -p1
|
|
@ -5,7 +5,7 @@ if {[have_spec linux]} {
|
|||||||
|
|
||||||
set build_components {
|
set build_components {
|
||||||
core init drivers/timer drivers/uart
|
core init drivers/timer drivers/uart
|
||||||
noux/minimal lib/libc_noux
|
noux lib/libc_noux
|
||||||
server/ram_fs test/libc_noux
|
server/ram_fs test/libc_noux
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
build { core init drivers/timer noux/minimal server/log_terminal
|
build { core init drivers/timer noux server/log_terminal
|
||||||
lib/libc_noux noux-pkg/coreutils }
|
lib/libc_noux noux-pkg/coreutils }
|
||||||
|
|
||||||
create_boot_directory
|
create_boot_directory
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
build {
|
build {
|
||||||
core init drivers/timer server/log_terminal noux/minimal lib/libc_noux
|
core init drivers/timer server/log_terminal noux lib/libc_noux
|
||||||
test/noux_fork
|
test/noux_fork
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,249 +0,0 @@
|
|||||||
set use_usb_driver [expr [have_spec omap4] || [have_spec arndale] || [have_spec rpi]]
|
|
||||||
set use_nic_driver [expr !$use_usb_driver && ![have_spec linux] && ![have_spec odroid_xu]]
|
|
||||||
|
|
||||||
if {[expr !$use_usb_driver && !$use_nic_driver] ||
|
|
||||||
[expr [have_include "power_on/qemu"] && [have_spec zynq]] ||
|
|
||||||
[expr [have_spec imx53] && [have_spec trustzone]]} {
|
|
||||||
puts "\n Run script is not supported on this platform. \n"; exit 0 }
|
|
||||||
|
|
||||||
|
|
||||||
set bridge_mac "02:02:02:02:02:00"
|
|
||||||
|
|
||||||
# autopilot: configure disjoint mac-address ranges for x86_32, x86_64, and others
|
|
||||||
if {[get_cmd_switch --autopilot]} {
|
|
||||||
if {[have_spec x86_32]} { set bridge_mac "02:02:02:02:32:00" }
|
|
||||||
if {[have_spec x86_64]} { set bridge_mac "02:02:02:02:64:00" }
|
|
||||||
}
|
|
||||||
|
|
||||||
set build_components {
|
|
||||||
core init
|
|
||||||
drivers/timer
|
|
||||||
server/tcp_terminal
|
|
||||||
server/nic_bridge
|
|
||||||
noux/net lib/libc_noux
|
|
||||||
noux-pkg/netcat
|
|
||||||
}
|
|
||||||
|
|
||||||
proc gpio_drv { } { if {[have_spec rpi] && [have_spec hw]} { return hw_gpio_drv }
|
|
||||||
if {[have_spec rpi] && [have_spec foc]} { return foc_gpio_drv }
|
|
||||||
return gpio_drv }
|
|
||||||
|
|
||||||
lappend_if $use_usb_driver build_components drivers/usb
|
|
||||||
lappend_if $use_nic_driver build_components drivers/nic
|
|
||||||
lappend_if [have_spec gpio] build_components drivers/gpio
|
|
||||||
lappend_if [have_include "power_on/qemu"] build_components drivers/uart
|
|
||||||
|
|
||||||
source ${genode_dir}/repos/base/run/platform_drv.inc
|
|
||||||
append_platform_drv_build_components
|
|
||||||
|
|
||||||
build $build_components
|
|
||||||
|
|
||||||
#
|
|
||||||
# The '<build-dir>/bin/etc/' directory is expected to contain the
|
|
||||||
# files 'services', 'protocols', and 'hosts'.
|
|
||||||
# Download these files from the FreeBSD source tree is possible.
|
|
||||||
#
|
|
||||||
exec mkdir -p bin/etc
|
|
||||||
set freebsd_url "http://svn.freebsd.org/base/release/8.2.0/etc"
|
|
||||||
foreach etc_file { services protocols hosts } {
|
|
||||||
if {![file exists bin/etc/$etc_file]} {
|
|
||||||
catch { exec wget -c -P bin/etc $freebsd_url/$etc_file } } }
|
|
||||||
|
|
||||||
exec tar rfv bin/netcat.tar -h -C bin/ etc
|
|
||||||
|
|
||||||
create_boot_directory
|
|
||||||
|
|
||||||
append config {
|
|
||||||
<config verbose="yes">
|
|
||||||
<parent-provides>
|
|
||||||
<service name="ROM"/>
|
|
||||||
<service name="LOG"/>
|
|
||||||
<service name="RM"/>
|
|
||||||
<service name="CPU"/>
|
|
||||||
<service name="PD"/>
|
|
||||||
<service name="IRQ"/>
|
|
||||||
<service name="IO_MEM"/>
|
|
||||||
<service name="IO_PORT"/>
|
|
||||||
</parent-provides>
|
|
||||||
<default-route>
|
|
||||||
<any-service> <parent/> <any-child/> </any-service>
|
|
||||||
</default-route>
|
|
||||||
<default caps="100"/>
|
|
||||||
<start name="timer">
|
|
||||||
<resource name="RAM" quantum="1M"/>
|
|
||||||
<provides><service name="Timer"/></provides>
|
|
||||||
</start>}
|
|
||||||
|
|
||||||
append_if [have_include "power_on/qemu"] config {
|
|
||||||
<start name="uart_drv">
|
|
||||||
<resource name="RAM" quantum="1M"/>
|
|
||||||
<provides>
|
|
||||||
<service name="Terminal"/>
|
|
||||||
<service name="Uart"/>
|
|
||||||
</provides>
|
|
||||||
<config>
|
|
||||||
<policy label_prefix="noux_net" uart="1"/>
|
|
||||||
</config>
|
|
||||||
</start>}
|
|
||||||
|
|
||||||
if {![have_include "power_on/qemu"]} {
|
|
||||||
append config {
|
|
||||||
<start name="tcp_terminal" caps="200">
|
|
||||||
<resource name="RAM" quantum="5M"/>
|
|
||||||
<provides> <service name="Terminal"/> </provides>
|
|
||||||
<route>
|
|
||||||
<service name="Nic"> <child name="nic_bridge"/> </service>
|
|
||||||
<any-service> <parent/> <any-child/> </any-service>
|
|
||||||
</route>
|
|
||||||
<config>
|
|
||||||
<policy label_prefix="noux_net" port="8888"/>
|
|
||||||
</config>
|
|
||||||
</start>
|
|
||||||
<start name="nic_bridge" caps="200">
|
|
||||||
<resource name="RAM" quantum="6M"/>
|
|
||||||
<provides><service name="Nic"/></provides>
|
|
||||||
<config mac="} $bridge_mac {"/>
|
|
||||||
<route>}
|
|
||||||
append_if $use_nic_driver config {
|
|
||||||
<service name="Nic"> <child name="nic_drv"/></service>}
|
|
||||||
append_if $use_usb_driver config {
|
|
||||||
<service name="Nic"> <child name="usb_drv"/></service>}
|
|
||||||
append config {
|
|
||||||
<any-service> <parent/> </any-service>
|
|
||||||
</route>
|
|
||||||
</start>}
|
|
||||||
}
|
|
||||||
|
|
||||||
append_if $use_nic_driver config {
|
|
||||||
<start name="nic_drv" caps="130">
|
|
||||||
<resource name="RAM" quantum="20M"/>
|
|
||||||
<provides> <service name="Nic"/> </provides>
|
|
||||||
} [nic_drv_config] {
|
|
||||||
</start>}
|
|
||||||
|
|
||||||
append_if [have_spec gpio] config "
|
|
||||||
<start name=\"[gpio_drv]\" caps=\"140\">
|
|
||||||
<resource name=\"RAM\" quantum=\"4M\"/>
|
|
||||||
<provides><service name=\"Gpio\"/></provides>
|
|
||||||
<config/>
|
|
||||||
</start>"
|
|
||||||
|
|
||||||
append_if $use_usb_driver config {
|
|
||||||
<start name="usb_drv" caps="120">
|
|
||||||
<resource name="RAM" quantum="14M"/>
|
|
||||||
<provides>
|
|
||||||
<service name="Nic"/>
|
|
||||||
<service name="Input"/>
|
|
||||||
</provides>
|
|
||||||
<config uhci="no" ehci="yes" xhci="no">
|
|
||||||
<nic mac="02:00:00:00:01:01"/>
|
|
||||||
</config>
|
|
||||||
</start>}
|
|
||||||
|
|
||||||
append_platform_drv_config
|
|
||||||
|
|
||||||
append config {
|
|
||||||
<start name="noux_net" caps="500">
|
|
||||||
<resource name="RAM" quantum="1G"/>
|
|
||||||
<config>
|
|
||||||
<fstab> <tar name="netcat.tar" at="/"/> </fstab>
|
|
||||||
<start name="/bin/netcat">
|
|
||||||
<arg value="-l"/>
|
|
||||||
<arg value="-p 5555"/>
|
|
||||||
</start>
|
|
||||||
</config>}
|
|
||||||
|
|
||||||
append_if [expr ![have_include "power_on/qemu"]] config {
|
|
||||||
<route>
|
|
||||||
<service name="Nic"> <child name="nic_bridge"/> </service>
|
|
||||||
<any-service> <parent/> <any-child/> </any-service>
|
|
||||||
</route>}
|
|
||||||
|
|
||||||
append config {
|
|
||||||
</start>
|
|
||||||
</config>
|
|
||||||
}
|
|
||||||
|
|
||||||
install_config $config
|
|
||||||
|
|
||||||
#
|
|
||||||
# Boot modules
|
|
||||||
#
|
|
||||||
|
|
||||||
# generic modules
|
|
||||||
set boot_modules {
|
|
||||||
core init timer tcp_terminal nic_bridge
|
|
||||||
ld.lib.so noux_net libc.lib.so vfs.lib.so libm.lib.so libc_pipe.lib.so pthread.lib.so
|
|
||||||
libc_noux.lib.so lwip_legacy.lib.so netcat.tar posix.lib.so
|
|
||||||
}
|
|
||||||
|
|
||||||
# platform-specific modules
|
|
||||||
lappend_if $use_nic_driver boot_modules nic_drv
|
|
||||||
lappend_if $use_usb_driver boot_modules usb_drv
|
|
||||||
lappend_if [have_include "power_on/qemu"] boot_modules uart_drv
|
|
||||||
lappend_if [have_spec gpio] boot_modules [gpio_drv]
|
|
||||||
|
|
||||||
append_platform_drv_boot_modules
|
|
||||||
|
|
||||||
build_boot_image $boot_modules
|
|
||||||
|
|
||||||
set noux_output_file "noux_output.log"
|
|
||||||
set serial_ip_addr "localhost"
|
|
||||||
set noux_ip_addr "localhost"
|
|
||||||
|
|
||||||
if {[have_include "power_on/qemu"]} {
|
|
||||||
#
|
|
||||||
# Redirect the output of Noux via the virtual serial port 1 into a file to be
|
|
||||||
# dumped after the successful completion of the test.
|
|
||||||
append qemu_args " -nographic"
|
|
||||||
append qemu_args " -serial mon:stdio"
|
|
||||||
append qemu_args " -serial file:$noux_output_file"
|
|
||||||
|
|
||||||
append_if [have_spec x86] qemu_args " -net nic,model=e1000 "
|
|
||||||
append_if [have_spec lan9118] qemu_args " -net nic,model=lan9118 "
|
|
||||||
|
|
||||||
append qemu_args " -net user -redir tcp:5555::5555 "
|
|
||||||
|
|
||||||
run_genode_until {.*got IP address.*\n} 60
|
|
||||||
set serial_id [output_spawn_id]
|
|
||||||
} else {
|
|
||||||
# wait until we got both IP addresses in the output afterwards
|
|
||||||
run_genode_until {.*got IP address.*\n.*got IP address.*\n} 60
|
|
||||||
set serial_id [output_spawn_id]
|
|
||||||
|
|
||||||
regexp {\[init -> noux_net\] got IP address [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+} $output noux_ip_addr
|
|
||||||
regexp {[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+} $noux_ip_addr noux_ip_addr
|
|
||||||
|
|
||||||
regexp {\[init -> tcp_terminal\] got IP address [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+} $output serial_ip_addr
|
|
||||||
regexp {[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+} $serial_ip_addr serial_ip_addr
|
|
||||||
|
|
||||||
# connect to Genode target and reading log output via network connection
|
|
||||||
|
|
||||||
spawn socat -u tcp:$serial_ip_addr:8888 OPEN:$noux_output_file,creat,append
|
|
||||||
}
|
|
||||||
|
|
||||||
sleep 4
|
|
||||||
|
|
||||||
|
|
||||||
puts "--- serial '$serial_ip_addr' noux '$noux_ip_addr'"
|
|
||||||
#
|
|
||||||
# This usage of netcat needs the OpenBSD nc command and will not
|
|
||||||
# work with GNU netcat because it will not close the connection
|
|
||||||
# automatically after sending the string.
|
|
||||||
#
|
|
||||||
exec echo -e "Hello Genode" | netcat $noux_ip_addr 5555 &
|
|
||||||
|
|
||||||
run_genode_until {exited with exit value 1} 20 $serial_id
|
|
||||||
|
|
||||||
sleep 4
|
|
||||||
|
|
||||||
set output [exec cat $noux_output_file]
|
|
||||||
puts "\noutput:\n$output\n"
|
|
||||||
exec rm $noux_output_file
|
|
||||||
|
|
||||||
exec rm -r bin/etc
|
|
||||||
|
|
||||||
if {![regexp {Hello Genode} $output dummy]} {
|
|
||||||
puts stderr "Error: output not as expected"
|
|
||||||
exit 1
|
|
||||||
}
|
|
@ -1,6 +1,6 @@
|
|||||||
set build_components {
|
set build_components {
|
||||||
core init drivers/timer drivers/uart
|
core init drivers/timer drivers/uart
|
||||||
noux/minimal
|
noux
|
||||||
test/noux_signals
|
test/noux_signals
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ set use_usb_input [expr ![have_spec ps2] && ![have_spec sdl] && [have_spec usb]]
|
|||||||
create_boot_directory
|
create_boot_directory
|
||||||
|
|
||||||
set build_components {
|
set build_components {
|
||||||
core init drivers/timer noux/minimal lib/libc_noux
|
core init drivers/timer noux lib/libc_noux
|
||||||
server/log_terminal server/ram_fs
|
server/log_terminal server/ram_fs
|
||||||
test/libports/ncurses
|
test/libports/ncurses
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,7 @@ build {
|
|||||||
app/sequence
|
app/sequence
|
||||||
drivers/timer
|
drivers/timer
|
||||||
lib/libc_noux
|
lib/libc_noux
|
||||||
noux/minimal
|
noux
|
||||||
noux-pkg/coreutils
|
noux-pkg/coreutils
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ set build_components {
|
|||||||
server/ram_fs server/report_rom
|
server/ram_fs server/report_rom
|
||||||
server/tcp_terminal drivers/nic
|
server/tcp_terminal drivers/nic
|
||||||
lib/libc_noux
|
lib/libc_noux
|
||||||
noux/minimal
|
noux
|
||||||
}
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
TARGET = lighttpd_noux
|
|
||||||
|
|
||||||
include $(REP_DIR)/src/app/lighttpd/target.inc
|
|
||||||
|
|
||||||
# search path for 'plugin-static.h'
|
|
||||||
INC_DIR += $(REP_DIR)/src/app/lighttpd
|
|
||||||
|
|
||||||
LIBS += libc_noux
|
|
@ -1,42 +0,0 @@
|
|||||||
CONFIGURE_ARGS = --with-ssl \
|
|
||||||
--with-zlib \
|
|
||||||
--disable-nls \
|
|
||||||
--disable-ipv6 \
|
|
||||||
--disable-rpath-hack \
|
|
||||||
--with-cfg-file=/etc/lynx.cfg \
|
|
||||||
--with-lss-file=/etc/lynx.lss
|
|
||||||
|
|
||||||
#
|
|
||||||
# Rather than dealing with autoconf force usage of <openssl/xxx.h>
|
|
||||||
# by defining it explicitly
|
|
||||||
#
|
|
||||||
CFLAGS += -DUSE_OPENSSL_INCL
|
|
||||||
|
|
||||||
#
|
|
||||||
# Needed for <sys/types.h>
|
|
||||||
#
|
|
||||||
CFLAGS += -D__BSD_VISIBLE
|
|
||||||
|
|
||||||
LIBS += ncurses zlib libssl libcrypto
|
|
||||||
|
|
||||||
#
|
|
||||||
# Make the zlib linking test succeed
|
|
||||||
#
|
|
||||||
Makefile: dummy_libs
|
|
||||||
|
|
||||||
LDFLAGS += -L$(PWD)
|
|
||||||
|
|
||||||
dummy_libs: libcrypto.a libssl.a libz.a
|
|
||||||
|
|
||||||
libcrypto.a:
|
|
||||||
$(VERBOSE)$(AR) -rc $@
|
|
||||||
|
|
||||||
libssl.a:
|
|
||||||
$(VERBOSE)$(AR) -rc $@
|
|
||||||
|
|
||||||
libz.a:
|
|
||||||
$(VERBOSE)$(AR) -rc $@
|
|
||||||
|
|
||||||
INSTALL_TARGET = install
|
|
||||||
|
|
||||||
include $(call select_from_repositories,mk/noux.mk)
|
|
@ -1,3 +0,0 @@
|
|||||||
TARGET = netcat
|
|
||||||
|
|
||||||
include $(call select_from_repositories,mk/noux.mk)
|
|
@ -1,28 +0,0 @@
|
|||||||
#
|
|
||||||
# This is no actual noux-pkg but a collection of files
|
|
||||||
# which are essential for noux/net.
|
|
||||||
#
|
|
||||||
|
|
||||||
BUILD_BIN_DIR = ../../bin
|
|
||||||
TARGET_DIR = $(BUILD_BIN_DIR)/noux-etc/etc
|
|
||||||
|
|
||||||
ETC_CONTRIB_DIR := $(call select_from_ports,etc)/src/noux-pkg/etc
|
|
||||||
|
|
||||||
ETC_FILES = hosts \
|
|
||||||
nsswitch.conf \
|
|
||||||
protocols \
|
|
||||||
services
|
|
||||||
|
|
||||||
TARGET = noux-etc.build
|
|
||||||
|
|
||||||
copy-contrib-files:
|
|
||||||
$(VERBOSE)mkdir -p $(TARGET_DIR)
|
|
||||||
$(VERBOSE)for i in $(ETC_FILES); do \
|
|
||||||
cp $(ETC_CONTRIB_DIR)/$$i $(TARGET_DIR) ; \
|
|
||||||
done
|
|
||||||
|
|
||||||
generate-files: copy-contrib-files
|
|
||||||
|
|
||||||
$(BUILD_BIN_DIR)/$(TARGET): generate-files
|
|
||||||
|
|
||||||
$(TARGET): $(BUILD_BIN_DIR)/$(TARGET)
|
|
@ -1,75 +0,0 @@
|
|||||||
Although we use FreeBSD libc we actually do not have __progname. As
|
|
||||||
interim fix we just remove the check from configure.
|
|
||||||
|
|
||||||
diff --git a/configure b/configure
|
|
||||||
index 0d7a5b9..3218724 100755
|
|
||||||
--- a/src/noux-pkg/openssh/configure
|
|
||||||
+++ b/src/noux-pkg/openssh/configure
|
|
||||||
@@ -30485,67 +30485,6 @@ _ACEOF
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
-{ echo "$as_me:$LINENO: checking if libc defines __progname" >&5
|
|
||||||
-echo $ECHO_N "checking if libc defines __progname... $ECHO_C" >&6; }
|
|
||||||
-if test "${ac_cv_libc_defines___progname+set}" = set; then
|
|
||||||
- echo $ECHO_N "(cached) $ECHO_C" >&6
|
|
||||||
-else
|
|
||||||
-
|
|
||||||
- cat >conftest.$ac_ext <<_ACEOF
|
|
||||||
-/* confdefs.h. */
|
|
||||||
-_ACEOF
|
|
||||||
-cat confdefs.h >>conftest.$ac_ext
|
|
||||||
-cat >>conftest.$ac_ext <<_ACEOF
|
|
||||||
-/* end confdefs.h. */
|
|
||||||
-
|
|
||||||
-int
|
|
||||||
-main ()
|
|
||||||
-{
|
|
||||||
- extern char *__progname; printf("%s", __progname);
|
|
||||||
- ;
|
|
||||||
- return 0;
|
|
||||||
-}
|
|
||||||
-_ACEOF
|
|
||||||
-rm -f conftest.$ac_objext conftest$ac_exeext
|
|
||||||
-if { (ac_try="$ac_link"
|
|
||||||
-case "(($ac_try" in
|
|
||||||
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
|
||||||
- *) ac_try_echo=$ac_try;;
|
|
||||||
-esac
|
|
||||||
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
|
|
||||||
- (eval "$ac_link") 2>conftest.er1
|
|
||||||
- ac_status=$?
|
|
||||||
- grep -v '^ *+' conftest.er1 >conftest.err
|
|
||||||
- rm -f conftest.er1
|
|
||||||
- cat conftest.err >&5
|
|
||||||
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
|
||||||
- (exit $ac_status); } && {
|
|
||||||
- test -z "$ac_c_werror_flag" ||
|
|
||||||
- test ! -s conftest.err
|
|
||||||
- } && test -s conftest$ac_exeext &&
|
|
||||||
- $as_test_x conftest$ac_exeext; then
|
|
||||||
- ac_cv_libc_defines___progname="yes"
|
|
||||||
-else
|
|
||||||
- echo "$as_me: failed program was:" >&5
|
|
||||||
-sed 's/^/| /' conftest.$ac_ext >&5
|
|
||||||
-
|
|
||||||
- ac_cv_libc_defines___progname="no"
|
|
||||||
-
|
|
||||||
-fi
|
|
||||||
-
|
|
||||||
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
|
|
||||||
- conftest$ac_exeext conftest.$ac_ext
|
|
||||||
-
|
|
||||||
-fi
|
|
||||||
-{ echo "$as_me:$LINENO: result: $ac_cv_libc_defines___progname" >&5
|
|
||||||
-echo "${ECHO_T}$ac_cv_libc_defines___progname" >&6; }
|
|
||||||
-if test "x$ac_cv_libc_defines___progname" = "xyes" ; then
|
|
||||||
-
|
|
||||||
-cat >>confdefs.h <<\_ACEOF
|
|
||||||
-#define HAVE___PROGNAME 1
|
|
||||||
-_ACEOF
|
|
||||||
-
|
|
||||||
-fi
|
|
||||||
|
|
||||||
{ echo "$as_me:$LINENO: checking whether $CC implements __FUNCTION__" >&5
|
|
||||||
echo $ECHO_N "checking whether $CC implements __FUNCTION__... $ECHO_C" >&6; }
|
|
@ -1,22 +0,0 @@
|
|||||||
set*uid() is not implemented but it does not matter anyway because there
|
|
||||||
is only one user per noux instance.
|
|
||||||
|
|
||||||
diff --git a/sshconnect.h b/sshconnect.h
|
|
||||||
index 0ea6e99..18f7d36 100644
|
|
||||||
--- a/src/noux-pkg/openssh/sshconnect.h
|
|
||||||
+++ b/src/noux-pkg/openssh/sshconnect.h
|
|
||||||
@@ -55,6 +55,7 @@ void ssh_userauth2(const char *, const char *, char *, Sensitive *);
|
|
||||||
void ssh_put_password(char *);
|
|
||||||
int ssh_local_cmd(const char *);
|
|
||||||
|
|
||||||
+#if 0
|
|
||||||
/*
|
|
||||||
* Macros to raise/lower permissions.
|
|
||||||
*/
|
|
||||||
@@ -73,3 +74,6 @@ int ssh_local_cmd(const char *);
|
|
||||||
strerror(errno)); \
|
|
||||||
errno = save_errno; \
|
|
||||||
} while (0)
|
|
||||||
+#endif
|
|
||||||
+#define PRIV_START
|
|
||||||
+#define PRIV_END
|
|
@ -1,67 +0,0 @@
|
|||||||
TARGET = openssh
|
|
||||||
|
|
||||||
#
|
|
||||||
# This prefix 'magic' is needed because OpenSSH uses $exec_prefix
|
|
||||||
# while compiling (e.g. -DSSH_PATH) and in the end the $prefix and
|
|
||||||
# $exec_prefix path differ.
|
|
||||||
#
|
|
||||||
CONFIGURE_ARGS += --disable-ip6 \
|
|
||||||
--with-md5-passwords \
|
|
||||||
--without-zlib-version-check \
|
|
||||||
--with-ssl-engine \
|
|
||||||
--without-stackprotect \
|
|
||||||
--disable-finger \
|
|
||||||
--disable-gopher \
|
|
||||||
--disable-news \
|
|
||||||
--disable-ftp \
|
|
||||||
--disable-rpath-hack \
|
|
||||||
--disable-utmpx \
|
|
||||||
--disable-strip \
|
|
||||||
--exec-prefix= \
|
|
||||||
--bindir=/bin \
|
|
||||||
--sbindir=/bin \
|
|
||||||
--libexecdir=/bin
|
|
||||||
|
|
||||||
INSTALL_TARGET = install
|
|
||||||
|
|
||||||
LIBS += libcrypto libssl zlib
|
|
||||||
|
|
||||||
built.tag: Makefile Makefile_patch
|
|
||||||
|
|
||||||
Makefile_patch: Makefile
|
|
||||||
@#
|
|
||||||
@# Our $(LDFLAGS) contain options which are usable by gcc(1)
|
|
||||||
@# only. So instead of using ld(1) to link the binary, we have
|
|
||||||
@# to use gcc(1).
|
|
||||||
@#
|
|
||||||
$(VERBOSE)sed -i 's|^LD=.*|LD=$(CC)|' Makefile
|
|
||||||
@#
|
|
||||||
@# We do not want to generate host-keys because we are crosscompiling
|
|
||||||
@# and we can not run Genode binaries on the build system.
|
|
||||||
@#
|
|
||||||
$(VERBOSE)sed -i 's|^install:.*||' Makefile
|
|
||||||
$(VERBOSE)sed -i 's|^install-nokeys:|install:|' Makefile
|
|
||||||
@#
|
|
||||||
@# The path of ssh(1) is hardcoded to $(bindir)/ssh which in our
|
|
||||||
@# case is insufficient.
|
|
||||||
@#
|
|
||||||
$(VERBOSE)sed -i 's|^SSH_PROGRAM=.*|SSH_PROGRAM=/bin/ssh|' Makefile
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Make the zlib linking test succeed
|
|
||||||
#
|
|
||||||
Makefile: dummy_libs
|
|
||||||
|
|
||||||
LDFLAGS += -L$(PWD)
|
|
||||||
|
|
||||||
dummy_libs: libz.a libcrypto.a libssl.a
|
|
||||||
|
|
||||||
libcrypto.a:
|
|
||||||
$(VERBOSE)$(AR) -rc $@
|
|
||||||
libssl.a:
|
|
||||||
$(VERBOSE)$(AR) -rc $@
|
|
||||||
libz.a:
|
|
||||||
$(VERBOSE)$(AR) -rc $@
|
|
||||||
|
|
||||||
include $(call select_from_repositories,mk/noux.mk)
|
|
@ -285,11 +285,6 @@ class Noux::Child : public Rpc_object<Session>,
|
|||||||
io->unregister_wake_up_notifier(¬ifier);
|
io->unregister_wake_up_notifier(¬ifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Method for handling noux network related system calls
|
|
||||||
*/
|
|
||||||
bool _syscall_net(Syscall sc);
|
|
||||||
|
|
||||||
void _destruct()
|
void _destruct()
|
||||||
{
|
{
|
||||||
_ep.dissolve(this);
|
_ep.dissolve(this);
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
/**
|
|
||||||
* \brief Noux initialization
|
|
||||||
* \author Sebastian Sumpf
|
|
||||||
* \date 2017-02-24
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2017 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU Affero General Public License version 3.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __NOUX_CONSTRUCT_H_
|
|
||||||
#define __NOUX_CONSTRUCT_H_
|
|
||||||
|
|
||||||
namespace Genode { class Env; }
|
|
||||||
|
|
||||||
void noux_construct(Genode::Env &env);
|
|
||||||
|
|
||||||
#endif /* __NOUX_CONSTRUCT_H_ */
|
|
@ -18,7 +18,6 @@
|
|||||||
|
|
||||||
/* Noux includes */
|
/* Noux includes */
|
||||||
#include <child.h>
|
#include <child.h>
|
||||||
#include <construct.h>
|
|
||||||
#include <noux_session/sysio.h>
|
#include <noux_session/sysio.h>
|
||||||
#include <vfs_io_channel.h>
|
#include <vfs_io_channel.h>
|
||||||
#include <terminal_io_channel.h>
|
#include <terminal_io_channel.h>
|
||||||
@ -38,8 +37,6 @@ namespace Noux {
|
|||||||
void init_process_exited(int exit) { init_child = 0; exit_value = exit; }
|
void init_process_exited(int exit) { init_child = 0; exit_value = exit; }
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void init_network();
|
|
||||||
|
|
||||||
|
|
||||||
Noux::Io_receptor_registry * Noux::io_receptor_registry()
|
Noux::Io_receptor_registry * Noux::io_receptor_registry()
|
||||||
{
|
{
|
||||||
@ -271,8 +268,6 @@ struct Noux::Main
|
|||||||
|
|
||||||
User_info _user_info { _config.xml() };
|
User_info _user_info { _config.xml() };
|
||||||
|
|
||||||
bool _network_initialized = (init_network(), true);
|
|
||||||
|
|
||||||
Signal_handler<Main> _destruct_handler {
|
Signal_handler<Main> _destruct_handler {
|
||||||
_env.ep(), *this, &Main::_handle_destruct };
|
_env.ep(), *this, &Main::_handle_destruct };
|
||||||
|
|
||||||
@ -355,7 +350,7 @@ struct Noux::Main
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void noux_construct(Genode::Env &env)
|
void Component::construct(Genode::Env &env)
|
||||||
{
|
{
|
||||||
static Noux::Main main(env);
|
static Noux::Main main(env);
|
||||||
}
|
}
|
||||||
|
@ -1,20 +0,0 @@
|
|||||||
/**
|
|
||||||
* \brief Noux initialization
|
|
||||||
* \author Sebastian Sumpf
|
|
||||||
* \date 2017-02-24
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2017 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU Affero General Public License version 3.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <base/component.h>
|
|
||||||
#include <construct.h>
|
|
||||||
|
|
||||||
void Component::construct(Genode::Env &env)
|
|
||||||
{
|
|
||||||
noux_construct(env);
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
/*
|
|
||||||
* \brief Dummy stubs for network-related Noux functions
|
|
||||||
* \author Norman Feske
|
|
||||||
* \date 2012-05-24
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2011-2017 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU Affero General Public License version 3.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* local includes */
|
|
||||||
#include <child.h>
|
|
||||||
|
|
||||||
void init_network() { }
|
|
||||||
|
|
||||||
bool Noux::Child::_syscall_net(Noux::Session::Syscall sc) { return false; }
|
|
@ -1,11 +0,0 @@
|
|||||||
TARGET = noux
|
|
||||||
LIBS = base alarm vfs
|
|
||||||
SRC_CC = main.cc syscall.cc dummy_net.cc construct.cc
|
|
||||||
INC_DIR += $(PRG_DIR)
|
|
||||||
INC_DIR += $(PRG_DIR)/../
|
|
||||||
|
|
||||||
vpath main.cc $(PRG_DIR)/..
|
|
||||||
vpath syscall.cc $(PRG_DIR)/..
|
|
||||||
vpath dummy_net.cc $(PRG_DIR)
|
|
||||||
|
|
||||||
CC_CXX_WARN_STRICT =
|
|
@ -1,4 +0,0 @@
|
|||||||
This directory contains the implementation of network related stuff for noux.
|
|
||||||
|
|
||||||
Currently network support is provided by using the libc and lwip directly
|
|
||||||
(only for initialization of the actual network subsystem).
|
|
@ -1,20 +0,0 @@
|
|||||||
/**
|
|
||||||
* \brief Noux initialization
|
|
||||||
* \author Sebastian Sumpf
|
|
||||||
* \date 2017-02-24
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2017 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU Affero General Public License version 3.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <libc/component.h>
|
|
||||||
#include <construct.h>
|
|
||||||
|
|
||||||
void Libc::Component::construct(Libc::Env &env)
|
|
||||||
{
|
|
||||||
noux_construct(env);
|
|
||||||
}
|
|
@ -1,243 +0,0 @@
|
|||||||
/*
|
|
||||||
* \brief Unix emulation environment for Genode
|
|
||||||
* \author Josef Soentgen
|
|
||||||
* \date 2012-04-13
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2011-2017 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU Affero General Public License version 3.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <dataspace/client.h>
|
|
||||||
#include <base/lock.h>
|
|
||||||
|
|
||||||
#include <lwip_legacy/genode.h>
|
|
||||||
|
|
||||||
/* Noux includes */
|
|
||||||
#include <child.h>
|
|
||||||
#include <socket_io_channel.h>
|
|
||||||
#include <shared_pointer.h>
|
|
||||||
#include <io_receptor_registry.h>
|
|
||||||
|
|
||||||
/* Libc includes */
|
|
||||||
#include <sys/select.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
|
|
||||||
using namespace Noux;
|
|
||||||
|
|
||||||
void (*libc_select_notify)();
|
|
||||||
|
|
||||||
/* helper macro for casting the backend */
|
|
||||||
#define GET_SOCKET_IO_CHANNEL_BACKEND(backend, name) \
|
|
||||||
Socket_io_channel_backend *name = \
|
|
||||||
dynamic_cast<Socket_io_channel_backend*>(backend)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This callback function is called from lwip via the libc_select_notify
|
|
||||||
* function pointer if an event occurs.
|
|
||||||
*/
|
|
||||||
static void select_notify()
|
|
||||||
{
|
|
||||||
static Genode::Lock mutex;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The function could be called multiple times while actually
|
|
||||||
* still running.
|
|
||||||
*/
|
|
||||||
Genode::Lock::Guard guard(mutex);
|
|
||||||
|
|
||||||
for (Io_receptor *r = io_receptor_registry()->first();
|
|
||||||
r != 0; r = r->next()) {
|
|
||||||
r->check_and_wakeup();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initialise the network subsystem by directly using lwip
|
|
||||||
*/
|
|
||||||
|
|
||||||
void init_network()
|
|
||||||
{
|
|
||||||
log("--- noux: initialize network ---");
|
|
||||||
|
|
||||||
if (!libc_select_notify)
|
|
||||||
libc_select_notify = select_notify;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************
|
|
||||||
** Noux net syscall dispatcher **
|
|
||||||
*********************************/
|
|
||||||
|
|
||||||
bool Noux::Child::_syscall_net(Noux::Session::Syscall sc)
|
|
||||||
{
|
|
||||||
switch (sc) {
|
|
||||||
/**
|
|
||||||
* Keep compiler from complaining
|
|
||||||
*/
|
|
||||||
case SYSCALL_WRITE:
|
|
||||||
case SYSCALL_READ:
|
|
||||||
case SYSCALL_STAT:
|
|
||||||
case SYSCALL_LSTAT:
|
|
||||||
case SYSCALL_FSTAT:
|
|
||||||
case SYSCALL_FCNTL:
|
|
||||||
case SYSCALL_OPEN:
|
|
||||||
case SYSCALL_CLOSE:
|
|
||||||
case SYSCALL_IOCTL:
|
|
||||||
case SYSCALL_LSEEK:
|
|
||||||
case SYSCALL_DIRENT:
|
|
||||||
case SYSCALL_EXECVE:
|
|
||||||
case SYSCALL_SELECT:
|
|
||||||
case SYSCALL_FORK:
|
|
||||||
case SYSCALL_GETPID:
|
|
||||||
case SYSCALL_WAIT4:
|
|
||||||
case SYSCALL_PIPE:
|
|
||||||
case SYSCALL_DUP2:
|
|
||||||
case SYSCALL_INVALID:
|
|
||||||
case SYSCALL_UNLINK:
|
|
||||||
case SYSCALL_RENAME:
|
|
||||||
case SYSCALL_MKDIR:
|
|
||||||
case SYSCALL_FTRUNCATE:
|
|
||||||
case SYSCALL_READLINK:
|
|
||||||
case SYSCALL_SYMLINK:
|
|
||||||
case SYSCALL_USERINFO:
|
|
||||||
case SYSCALL_GETTIMEOFDAY:
|
|
||||||
case SYSCALL_CLOCK_GETTIME:
|
|
||||||
case SYSCALL_UTIMES:
|
|
||||||
case SYSCALL_SYNC:
|
|
||||||
case SYSCALL_KILL:
|
|
||||||
case SYSCALL_GETDTABLESIZE:
|
|
||||||
break;
|
|
||||||
case SYSCALL_SOCKET:
|
|
||||||
{
|
|
||||||
Socket_io_channel *socket_io_channel = new (_heap) Socket_io_channel();
|
|
||||||
|
|
||||||
GET_SOCKET_IO_CHANNEL_BACKEND(socket_io_channel->backend(), backend);
|
|
||||||
|
|
||||||
if (!backend->socket(_sysio)) {
|
|
||||||
delete socket_io_channel;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Shared_pointer<Io_channel> io_channel(socket_io_channel, _heap);
|
|
||||||
|
|
||||||
_sysio.socket_out.fd = add_io_channel(io_channel);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
case SYSCALL_GETSOCKOPT:
|
|
||||||
{
|
|
||||||
Shared_pointer<Io_channel> io = _lookup_channel(_sysio.getsockopt_in.fd);
|
|
||||||
|
|
||||||
GET_SOCKET_IO_CHANNEL_BACKEND(io->backend(), backend);
|
|
||||||
|
|
||||||
return backend->getsockopt(_sysio);
|
|
||||||
}
|
|
||||||
case SYSCALL_SETSOCKOPT:
|
|
||||||
{
|
|
||||||
Shared_pointer<Io_channel> io = _lookup_channel(_sysio.setsockopt_in.fd);
|
|
||||||
|
|
||||||
GET_SOCKET_IO_CHANNEL_BACKEND(io->backend(), backend);
|
|
||||||
|
|
||||||
return backend->setsockopt(_sysio);
|
|
||||||
}
|
|
||||||
case SYSCALL_ACCEPT:
|
|
||||||
{
|
|
||||||
Shared_pointer<Io_channel> io = _lookup_channel(_sysio.accept_in.fd);
|
|
||||||
|
|
||||||
GET_SOCKET_IO_CHANNEL_BACKEND(io->backend(), backend);
|
|
||||||
|
|
||||||
int socket = backend->accept(_sysio);
|
|
||||||
if (socket == -1)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
Socket_io_channel *socket_io_channel = new (_heap) Socket_io_channel(socket);
|
|
||||||
Shared_pointer<Io_channel> io_channel(socket_io_channel, _heap);
|
|
||||||
|
|
||||||
_sysio.accept_out.fd = add_io_channel(io_channel);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
case SYSCALL_BIND:
|
|
||||||
{
|
|
||||||
Shared_pointer<Io_channel> io = _lookup_channel(_sysio.bind_in.fd);
|
|
||||||
|
|
||||||
GET_SOCKET_IO_CHANNEL_BACKEND(io->backend(), backend);
|
|
||||||
|
|
||||||
return (backend->bind(_sysio) == -1) ? false : true;
|
|
||||||
}
|
|
||||||
case SYSCALL_LISTEN:
|
|
||||||
{
|
|
||||||
Shared_pointer<Io_channel> io = _lookup_channel(_sysio.listen_in.fd);
|
|
||||||
|
|
||||||
GET_SOCKET_IO_CHANNEL_BACKEND(io->backend(), backend);
|
|
||||||
|
|
||||||
return (backend->listen(_sysio) == -1) ? false : true;
|
|
||||||
}
|
|
||||||
case SYSCALL_SEND:
|
|
||||||
{
|
|
||||||
Shared_pointer<Io_channel> io = _lookup_channel(_sysio.send_in.fd);
|
|
||||||
|
|
||||||
GET_SOCKET_IO_CHANNEL_BACKEND(io->backend(), backend);
|
|
||||||
|
|
||||||
return (backend->send(_sysio) == -1) ? false : true;
|
|
||||||
}
|
|
||||||
case SYSCALL_SENDTO:
|
|
||||||
{
|
|
||||||
Shared_pointer<Io_channel> io = _lookup_channel(_sysio.sendto_in.fd);
|
|
||||||
|
|
||||||
GET_SOCKET_IO_CHANNEL_BACKEND(io->backend(), backend);
|
|
||||||
|
|
||||||
return (backend->sendto(_sysio) == -1) ? false : true;
|
|
||||||
}
|
|
||||||
case SYSCALL_RECV:
|
|
||||||
{
|
|
||||||
Shared_pointer<Io_channel> io = _lookup_channel(_sysio.recv_in.fd);
|
|
||||||
|
|
||||||
GET_SOCKET_IO_CHANNEL_BACKEND(io->backend(), backend);
|
|
||||||
|
|
||||||
return (backend->recv(_sysio) == -1) ? false : true;
|
|
||||||
}
|
|
||||||
case SYSCALL_RECVFROM:
|
|
||||||
{
|
|
||||||
Shared_pointer<Io_channel> io = _lookup_channel(_sysio.recvfrom_in.fd);
|
|
||||||
|
|
||||||
GET_SOCKET_IO_CHANNEL_BACKEND(io->backend(), backend);
|
|
||||||
|
|
||||||
return (backend->recvfrom(_sysio) == -1) ? false : true;
|
|
||||||
}
|
|
||||||
case SYSCALL_GETPEERNAME:
|
|
||||||
{
|
|
||||||
Shared_pointer<Io_channel> io = _lookup_channel(_sysio.getpeername_in.fd);
|
|
||||||
|
|
||||||
GET_SOCKET_IO_CHANNEL_BACKEND(io->backend(), backend);
|
|
||||||
|
|
||||||
return (backend->getpeername(_sysio) == -1) ? false : true;
|
|
||||||
}
|
|
||||||
case SYSCALL_SHUTDOWN:
|
|
||||||
{
|
|
||||||
Shared_pointer<Io_channel> io = _lookup_channel(_sysio.shutdown_in.fd);
|
|
||||||
|
|
||||||
GET_SOCKET_IO_CHANNEL_BACKEND(io->backend(), backend);
|
|
||||||
|
|
||||||
return (backend->shutdown(_sysio) == -1) ? false : true;
|
|
||||||
}
|
|
||||||
case SYSCALL_CONNECT:
|
|
||||||
{
|
|
||||||
Shared_pointer<Io_channel> io = _lookup_channel(_sysio.connect_in.fd);
|
|
||||||
|
|
||||||
GET_SOCKET_IO_CHANNEL_BACKEND(io->backend(), backend);
|
|
||||||
|
|
||||||
return (backend->connect(_sysio) == -1) ? false : true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
@ -1,501 +0,0 @@
|
|||||||
/*
|
|
||||||
* \brief I/O channel for sockets
|
|
||||||
* \author Josef Söntgen
|
|
||||||
* \date 2012-04-12
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2011-2017 Genode Labs GmbH
|
|
||||||
*
|
|
||||||
* This file is part of the Genode OS framework, which is distributed
|
|
||||||
* under the terms of the GNU Affero General Public License version 3.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef _NOUX__SOCKET_IO_CHANNEL_H_
|
|
||||||
#define _NOUX__SOCKET_IO_CHANNEL_H_
|
|
||||||
|
|
||||||
/* Genode includes */
|
|
||||||
#include <base/log.h>
|
|
||||||
|
|
||||||
/* Noux includes */
|
|
||||||
#include <io_channel.h>
|
|
||||||
#include <noux_session/sysio.h>
|
|
||||||
|
|
||||||
/* Libc includes */
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <sys/socket.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <netdb.h>
|
|
||||||
#include <netinet/in.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
namespace Noux {
|
|
||||||
class Socket_io_channel_backend;
|
|
||||||
class Socket_io_channel;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class Noux::Socket_io_channel_backend : public Io_channel_backend
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
|
|
||||||
int _socket;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
Socket_io_channel_backend()
|
|
||||||
:
|
|
||||||
_socket(-1)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
Socket_io_channel_backend(int s)
|
|
||||||
:
|
|
||||||
_socket(s)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
~Socket_io_channel_backend()
|
|
||||||
{
|
|
||||||
if (_socket != -1) {
|
|
||||||
::shutdown(_socket, SHUT_RDWR);
|
|
||||||
::close(_socket);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int type() const { return 1; }
|
|
||||||
|
|
||||||
int socket() const { return _socket; }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Io_channel interface implementation (only needed methods)
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool write(Sysio &sysio, ::size_t &count)
|
|
||||||
{
|
|
||||||
ssize_t result = ::write(_socket, sysio.write_in.chunk,
|
|
||||||
sysio.write_in.count);
|
|
||||||
|
|
||||||
if (result > -1) {
|
|
||||||
sysio.write_out.count = result;
|
|
||||||
count = result;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (errno) {
|
|
||||||
/* case EAGAIN: sysio.error.read = Sysio::READ_ERR_AGAIN; break; */
|
|
||||||
case EWOULDBLOCK: sysio.error.read = Vfs::File_io_service::READ_ERR_WOULD_BLOCK; break;
|
|
||||||
case EINVAL: sysio.error.read = Vfs::File_io_service::READ_ERR_INVALID; break;
|
|
||||||
case EIO: sysio.error.read = Vfs::File_io_service::READ_ERR_IO; break;
|
|
||||||
default:
|
|
||||||
log(__func__, ": unhandled errno: ", (int)errno);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool read(Sysio &sysio)
|
|
||||||
{
|
|
||||||
::size_t const max_count = Genode::min(sysio.read_in.count, sizeof(sysio.read_out.chunk));
|
|
||||||
|
|
||||||
ssize_t result = ::read(_socket, sysio.read_out.chunk, max_count);
|
|
||||||
|
|
||||||
if (result > -1) {
|
|
||||||
sysio.read_out.count = result;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (errno) {
|
|
||||||
/* case EAGAIN: sysio.error.read = Sysio::READ_ERR_AGAIN; break; */
|
|
||||||
case EWOULDBLOCK: sysio.error.read = Vfs::File_io_service::READ_ERR_WOULD_BLOCK; break;
|
|
||||||
case EINVAL: sysio.error.read = Vfs::File_io_service::READ_ERR_INVALID; break;
|
|
||||||
case EIO: sysio.error.read = Vfs::File_io_service::READ_ERR_IO; break;
|
|
||||||
default:
|
|
||||||
log(__func__, ": unhandled errno: ", (int)errno);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool fcntl(Sysio &sysio)
|
|
||||||
{
|
|
||||||
int cmd = -1;
|
|
||||||
switch (sysio.fcntl_in.cmd) {
|
|
||||||
|
|
||||||
case Sysio::FCNTL_CMD_GET_FILE_STATUS_FLAGS: cmd = F_GETFL; break;
|
|
||||||
case Sysio::FCNTL_CMD_SET_FILE_STATUS_FLAGS: cmd = F_SETFL; break;
|
|
||||||
default:
|
|
||||||
log("invalid fcntl command: ", (int)sysio.fcntl_in.cmd);
|
|
||||||
sysio.error.fcntl = Sysio::FCNTL_ERR_CMD_INVALID;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int result = ::fcntl(_socket, cmd, sysio.fcntl_in.long_arg);
|
|
||||||
|
|
||||||
sysio.fcntl_out.result = result;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool dirent(Sysio &sysio) { return false; }
|
|
||||||
|
|
||||||
bool ioctl(Sysio &sysio)
|
|
||||||
{
|
|
||||||
int request;
|
|
||||||
|
|
||||||
switch (sysio.ioctl_in.request) {
|
|
||||||
|
|
||||||
case Vfs::File_io_service::IOCTL_OP_FIONBIO: request = FIONBIO; break;
|
|
||||||
default:
|
|
||||||
log(__func__, ": invalid ioctl request: ", (int)sysio.ioctl_in.request);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
int result = ::ioctl(_socket, request, NULL);
|
|
||||||
|
|
||||||
return result ? false : true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool check_unblock(bool rd, bool wr, bool ex) const
|
|
||||||
{
|
|
||||||
fd_set readfds;
|
|
||||||
fd_set writefds;
|
|
||||||
fd_set exceptfds;
|
|
||||||
int ready;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The timeout will be overriden in libc's select() function
|
|
||||||
* but we still need a valid pointer because libc's select()
|
|
||||||
* will block forever otherwise.
|
|
||||||
*/
|
|
||||||
struct timeval timeout = { 0, 0 };
|
|
||||||
|
|
||||||
FD_ZERO(&readfds);
|
|
||||||
FD_ZERO(&writefds);
|
|
||||||
FD_ZERO(&exceptfds);
|
|
||||||
|
|
||||||
FD_SET(_socket, &readfds);
|
|
||||||
FD_SET(_socket, &writefds);
|
|
||||||
FD_SET(_socket, &exceptfds);
|
|
||||||
|
|
||||||
ready = ::select(_socket + 1, &readfds, &writefds, &exceptfds, &timeout);
|
|
||||||
|
|
||||||
if (ready > 0) {
|
|
||||||
if (rd) {
|
|
||||||
if (FD_ISSET(_socket, &readfds))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wr) {
|
|
||||||
if (FD_ISSET(_socket, &writefds))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ex) {
|
|
||||||
if (FD_ISSET(_socket, &exceptfds))
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* HACK: Since lwip won't mark fds as writable, even if they
|
|
||||||
* are, if asked multiple times we return true in this
|
|
||||||
* case. Hopefully that won't break any time soon.
|
|
||||||
*/
|
|
||||||
if (wr)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Socket methods
|
|
||||||
*/
|
|
||||||
|
|
||||||
int accept(Sysio &sysio)
|
|
||||||
{
|
|
||||||
int result;
|
|
||||||
|
|
||||||
if (sysio.accept_in.addrlen == 0) {
|
|
||||||
result = ::accept(_socket, NULL, NULL);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
result = ::accept(_socket, (sockaddr *)&sysio.accept_in.addr,
|
|
||||||
&sysio.accept_in.addrlen);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result == -1) {
|
|
||||||
switch (errno) {
|
|
||||||
/* case EAGAIN: sysio.error.accept = Sysio::ACCEPT_ERR_AGAIN; break; */
|
|
||||||
case ENOMEM: sysio.error.accept = Sysio::ACCEPT_ERR_NO_MEMORY; break;
|
|
||||||
case EINVAL: sysio.error.accept = Sysio::ACCEPT_ERR_INVALID; break;
|
|
||||||
case EOPNOTSUPP: sysio.error.accept = Sysio::ACCEPT_ERR_NOT_SUPPORTED; break;
|
|
||||||
case EWOULDBLOCK: sysio.error.accept = Sysio::ACCEPT_ERR_WOULD_BLOCK; break;
|
|
||||||
default:
|
|
||||||
log(__func__, ": unhandled errno: ", (int)errno);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
int bind(Sysio &sysio)
|
|
||||||
{
|
|
||||||
int result = ::bind(_socket, (const struct sockaddr *)&sysio.bind_in.addr,
|
|
||||||
sysio.bind_in.addrlen);
|
|
||||||
|
|
||||||
if (result == -1) {
|
|
||||||
switch (errno) {
|
|
||||||
case EACCES: sysio.error.bind = Sysio::BIND_ERR_ACCESS; break;
|
|
||||||
case EADDRINUSE: sysio.error.bind = Sysio::BIND_ERR_ADDR_IN_USE; break;
|
|
||||||
case EINVAL: sysio.error.bind = Sysio::BIND_ERR_INVALID; break;
|
|
||||||
case ENOMEM: sysio.error.bind = Sysio::BIND_ERR_NO_MEMORY; break;
|
|
||||||
default:
|
|
||||||
log(__func__, ": unhandled errno: ", (int)errno);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
int connect(Sysio &sysio)
|
|
||||||
{
|
|
||||||
int result = ::connect(_socket, (struct sockaddr *)&sysio.connect_in.addr,
|
|
||||||
sysio.connect_in.addrlen);
|
|
||||||
|
|
||||||
if (result == -1) {
|
|
||||||
switch (errno) {
|
|
||||||
case EAGAIN: sysio.error.connect = Sysio::CONNECT_ERR_AGAIN; break;
|
|
||||||
case EALREADY: sysio.error.connect = Sysio::CONNECT_ERR_ALREADY; break;
|
|
||||||
case EADDRINUSE: sysio.error.connect = Sysio::CONNECT_ERR_ADDR_IN_USE; break;
|
|
||||||
case EINPROGRESS: sysio.error.connect = Sysio::CONNECT_ERR_IN_PROGRESS; break;
|
|
||||||
case EISCONN: sysio.error.connect = Sysio::CONNECT_ERR_IS_CONNECTED; break;
|
|
||||||
case ECONNRESET: sysio.error.connect = Sysio::CONNECT_ERR_RESET; break;
|
|
||||||
case ECONNABORTED: sysio.error.connect = Sysio::CONNECT_ERR_ABORTED; break;
|
|
||||||
case EHOSTUNREACH: sysio.error.connect = Sysio::CONNECT_ERR_NO_ROUTE; break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
log(__func__, ": unhandled errno: ", (int)errno);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
int getpeername(Sysio &sysio)
|
|
||||||
{
|
|
||||||
return ::getpeername(_socket, (struct sockaddr *)&sysio.getpeername_in.addr,
|
|
||||||
(socklen_t *)&sysio.getpeername_in.addrlen);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool getsockopt(Sysio &sysio)
|
|
||||||
{
|
|
||||||
int result = ::getsockopt(_socket, sysio.getsockopt_in.level,
|
|
||||||
sysio.getsockopt_in.optname,
|
|
||||||
sysio.getsockopt_in.optval,
|
|
||||||
&sysio.getsockopt_in.optlen);
|
|
||||||
|
|
||||||
return (result == -1) ? false : true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int listen(Sysio &sysio)
|
|
||||||
{
|
|
||||||
int result = ::listen(_socket, sysio.listen_in.backlog);
|
|
||||||
|
|
||||||
if (result == -1) {
|
|
||||||
switch (errno) {
|
|
||||||
case EADDRINUSE: sysio.error.listen = Sysio::LISTEN_ERR_ADDR_IN_USE; break;
|
|
||||||
case EOPNOTSUPP: sysio.error.listen = Sysio::LISTEN_ERR_NOT_SUPPORTED; break;
|
|
||||||
default:
|
|
||||||
log(__func__, ": unhandled errno: ", (int)errno);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t recv(Sysio &sysio)
|
|
||||||
{
|
|
||||||
ssize_t result = ::recv(_socket, sysio.recv_in.buf, sysio.recv_in.len, sysio.recv_in.flags);
|
|
||||||
|
|
||||||
if (result == -1) {
|
|
||||||
switch (errno) {
|
|
||||||
/*case EAGAIN: sysio.error.recv = Sysio::RECV_ERR_AGAIN; break; */
|
|
||||||
case EWOULDBLOCK: sysio.error.recv = Sysio::RECV_ERR_WOULD_BLOCK; break;
|
|
||||||
case EINVAL: sysio.error.recv = Sysio::RECV_ERR_INVALID; break;
|
|
||||||
case ENOTCONN: sysio.error.recv = Sysio::RECV_ERR_NOT_CONNECTED; break;
|
|
||||||
default:
|
|
||||||
log(__func__, ": unhandled errno: ", (int)errno);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sysio.recv_out.len = result;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t recvfrom(Sysio &sysio)
|
|
||||||
{
|
|
||||||
ssize_t result = ::recvfrom(_socket, sysio.recv_in.buf, sysio.recv_in.len,
|
|
||||||
sysio.recv_in.flags, (struct sockaddr *)&sysio.recvfrom_in.src_addr,
|
|
||||||
&sysio.recvfrom_in.addrlen);
|
|
||||||
|
|
||||||
if (result == -1) {
|
|
||||||
switch (errno) {
|
|
||||||
/*case EAGAIN: sysio.error.recv = Sysio::RECV_ERR_AGAIN; break; */
|
|
||||||
case EWOULDBLOCK: sysio.error.recv = Sysio::RECV_ERR_WOULD_BLOCK; break;
|
|
||||||
case EINVAL: sysio.error.recv = Sysio::RECV_ERR_INVALID; break;
|
|
||||||
case ENOTCONN: sysio.error.recv = Sysio::RECV_ERR_NOT_CONNECTED; break;
|
|
||||||
default:
|
|
||||||
log(__func__, " unhandled errno: ", (int)errno);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sysio.recvfrom_out.len = result;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool setsockopt(Sysio &sysio)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Filter options out because lwip only supports several socket
|
|
||||||
* options. Therefore for now we silently return 0 and notify
|
|
||||||
* the user via debug message.
|
|
||||||
*/
|
|
||||||
switch (sysio.setsockopt_in.optname) {
|
|
||||||
case SO_DEBUG:
|
|
||||||
case SO_LINGER:
|
|
||||||
warning("SOL_SOCKET option '", sysio.setsockopt_in.optname, "' "
|
|
||||||
"is currently not supported, however we report success");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int result = ::setsockopt(_socket, sysio.setsockopt_in.level,
|
|
||||||
sysio.setsockopt_in.optname,
|
|
||||||
sysio.setsockopt_in.optval,
|
|
||||||
sysio.setsockopt_in.optlen);
|
|
||||||
|
|
||||||
return (result == -1) ? false : true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t send(Sysio &sysio)
|
|
||||||
{
|
|
||||||
ssize_t result = ::send(_socket, sysio.send_in.buf, sysio.send_in.len,
|
|
||||||
sysio.send_in.flags);
|
|
||||||
|
|
||||||
if (result == -1) {
|
|
||||||
switch (errno) {
|
|
||||||
/*case EAGAIN: sysio.error.send = Sysio::SEND_ERR_AGAIN; break; */
|
|
||||||
case EWOULDBLOCK: sysio.error.send = Sysio::SEND_ERR_WOULD_BLOCK; break;
|
|
||||||
case ECONNRESET: sysio.error.send = Sysio::SEND_ERR_CONNECTION_RESET; break;
|
|
||||||
case EINVAL: sysio.error.send = Sysio::SEND_ERR_INVALID; break;
|
|
||||||
case EISCONN: sysio.error.send = Sysio::SEND_ERR_IS_CONNECTED; break;
|
|
||||||
case ENOMEM: sysio.error.send = Sysio::SEND_ERR_NO_MEMORY; break;
|
|
||||||
default:
|
|
||||||
log(__func__, ": unhandled errno: ", (int)errno);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sysio.send_out.len = result;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
ssize_t sendto(Sysio &sysio)
|
|
||||||
{
|
|
||||||
ssize_t result = ::sendto(_socket, sysio.sendto_in.buf, sysio.sendto_in.len,
|
|
||||||
sysio.sendto_in.flags,
|
|
||||||
(const struct sockaddr *) &sysio.sendto_in.dest_addr,
|
|
||||||
sysio.sendto_in.addrlen);
|
|
||||||
|
|
||||||
if (result == -1) {
|
|
||||||
switch (errno) {
|
|
||||||
/*case EAGAIN: sysio.error.send = Sysio::SEND_ERR_AGAIN; break; */
|
|
||||||
case EWOULDBLOCK: sysio.error.send = Sysio::SEND_ERR_WOULD_BLOCK; break;
|
|
||||||
case ECONNRESET: sysio.error.send = Sysio::SEND_ERR_CONNECTION_RESET; break;
|
|
||||||
case EINVAL: sysio.error.send = Sysio::SEND_ERR_INVALID; break;
|
|
||||||
case EISCONN: sysio.error.send = Sysio::SEND_ERR_IS_CONNECTED; break;
|
|
||||||
case ENOMEM: sysio.error.send = Sysio::SEND_ERR_NO_MEMORY; break;
|
|
||||||
default:
|
|
||||||
log(__func__, ": unhandled errno: ", (int)errno);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sysio.sendto_out.len = result;
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
int shutdown(Sysio &sysio)
|
|
||||||
{
|
|
||||||
int result = ::shutdown(_socket, sysio.shutdown_in.how);
|
|
||||||
|
|
||||||
if (result == -1) {
|
|
||||||
switch (errno) {
|
|
||||||
case ENOTCONN: sysio.error.shutdown = Sysio::SHUTDOWN_ERR_NOT_CONNECTED; break;
|
|
||||||
default:
|
|
||||||
log(__func__, ": unhandled errno: ", (int)errno);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool socket(Sysio &sysio)
|
|
||||||
{
|
|
||||||
_socket = ::socket(sysio.socket_in.domain,
|
|
||||||
sysio.socket_in.type,
|
|
||||||
sysio.socket_in.protocol);
|
|
||||||
|
|
||||||
return (_socket == -1) ? false : true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class Noux::Socket_io_channel : public Io_channel
|
|
||||||
{
|
|
||||||
private:
|
|
||||||
|
|
||||||
Socket_io_channel_backend _backend;
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
Socket_io_channel() { }
|
|
||||||
Socket_io_channel(int s) : _backend(s) { }
|
|
||||||
~Socket_io_channel() { }
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Io_channel interface (only needed methods)
|
|
||||||
*/
|
|
||||||
|
|
||||||
Io_channel_backend *backend() { return &_backend; }
|
|
||||||
|
|
||||||
bool write(Sysio &sysio, ::size_t &count)
|
|
||||||
{
|
|
||||||
return _backend.write(sysio, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool read(Sysio &sysio) { return _backend.read(sysio); }
|
|
||||||
bool fcntl(Sysio &sysio) { return _backend.fcntl(sysio); }
|
|
||||||
bool ioctl(Sysio &sysio) { return _backend.ioctl(sysio); }
|
|
||||||
|
|
||||||
bool check_unblock(bool rd, bool wr, bool ex) const
|
|
||||||
{
|
|
||||||
return _backend.check_unblock(rd, wr, ex);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif /* _NOUX__SOCKET_IO_CHANNEL_H_ */
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
|||||||
TARGET = noux_net
|
|
||||||
LIBS += alarm libc libc_lwip_nic_dhcp vfs
|
|
||||||
SRC_CC = main.cc syscall.cc net.cc construct.cc
|
|
||||||
|
|
||||||
INC_DIR += $(PRG_DIR)
|
|
||||||
INC_DIR += $(PRG_DIR)/../
|
|
||||||
|
|
||||||
vpath main.cc $(PRG_DIR)/..
|
|
||||||
vpath syscall.cc $(PRG_DIR)/..
|
|
||||||
vpath net.cc $(PRG_DIR)
|
|
||||||
|
|
||||||
CC_CXX_WARN_STRICT =
|
|
@ -969,7 +969,8 @@ bool Noux::Child::syscall(Noux::Session::Syscall sc)
|
|||||||
case SYSCALL_SHUTDOWN:
|
case SYSCALL_SHUTDOWN:
|
||||||
case SYSCALL_CONNECT:
|
case SYSCALL_CONNECT:
|
||||||
|
|
||||||
result = _syscall_net(sc);
|
/* network support was removed */
|
||||||
|
result = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SYSCALL_INVALID: break;
|
case SYSCALL_INVALID: break;
|
||||||
|
8
repos/ports/src/noux/target.mk
Normal file
8
repos/ports/src/noux/target.mk
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
TARGET = noux
|
||||||
|
LIBS = base alarm vfs
|
||||||
|
SRC_CC = main.cc syscall.cc
|
||||||
|
INC_DIR += $(PRG_DIR)
|
||||||
|
|
||||||
|
vpath %.cc $(PRG_DIR)
|
||||||
|
|
||||||
|
CC_CXX_WARN_STRICT =
|
@ -60,7 +60,6 @@ nic_router
|
|||||||
nic_router_flood
|
nic_router_flood
|
||||||
nic_router_uplinks
|
nic_router_uplinks
|
||||||
noux
|
noux
|
||||||
noux_net_netcat
|
|
||||||
noux_tool_chain_auto
|
noux_tool_chain_auto
|
||||||
nvme
|
nvme
|
||||||
part_blk
|
part_blk
|
||||||
|
Loading…
x
Reference in New Issue
Block a user