mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-23 16:23:24 +00:00
新增网络socket的系统调用接口 (#247)
1.修复spinlock忘记恢复rflags的问题 2.WaitQueue增加wakeup_all的功能 3.完善tcp,udp,raw socket 4.把PollStatus结构体改为使用bitflags 5.新增iovec结构体 6.完成网络的系统调用 7.在bootstrap里面添加dnsmasq bridge-utils iptables --------- Co-authored-by: guanjinquan <1666320330@qq.com>
This commit is contained in:
@ -43,7 +43,7 @@ install_ubuntu_debian_pkg()
|
||||
gnupg \
|
||||
lsb-release \
|
||||
llvm-dev libclang-dev clang gcc-multilib \
|
||||
gcc build-essential fdisk dosfstools
|
||||
gcc build-essential fdisk dosfstools dnsmasq bridge-utils iptables
|
||||
|
||||
if [ -z "$(which docker)" ] && [ -n ${dockerInstall} ]; then
|
||||
echo "正在安装docker..."
|
||||
|
24
tools/qemu/ifdown-nat
Executable file
24
tools/qemu/ifdown-nat
Executable file
@ -0,0 +1,24 @@
|
||||
#!/bin/bash
|
||||
BRIDGE=dragonos-bridge
|
||||
if [ -n "$1" ]; then
|
||||
echo "正在断开接口 $1"
|
||||
ip link set $1 down
|
||||
brctl delif "$BRIDGE" $1
|
||||
tap=`brctl show | grep natnet | awk '{print $4}'`
|
||||
if [[ $tap != tap* ]];then
|
||||
ip link set "$BRIDGE" down
|
||||
brctl delbr "$BRIDGE"
|
||||
iptables -t nat -F
|
||||
kill `ps aux | grep dnsmasq | grep -v grep | awk '{print $2}'`
|
||||
echo "断开接口 $1 成功"
|
||||
echo "网桥 $BRIDGE 卸载成功"
|
||||
echo "dnsmasq 服务停止成功"
|
||||
exit 0
|
||||
else
|
||||
echo "断开接口 $1 成功"
|
||||
exit 0
|
||||
fi
|
||||
else
|
||||
echo "删除错误:未指定接口"
|
||||
exit 1
|
||||
fi
|
85
tools/qemu/ifup-nat
Executable file
85
tools/qemu/ifup-nat
Executable file
@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
# 设置 bridge 名称
|
||||
BRIDGE=dragonos-bridge
|
||||
# 设置网络信息
|
||||
NETWORK=192.168.137.0
|
||||
NETMASK=255.255.255.0
|
||||
GATEWAY=192.168.137.1
|
||||
DHCPRANGE=192.168.137.100,192.168.137.200
|
||||
# 启用PXE支持的可选参数
|
||||
TFTPROOT=
|
||||
BOOTP=
|
||||
|
||||
function check_bridge()
|
||||
{
|
||||
if brctl show | grep "^$BRIDGE" &> /dev/null; then
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
fi
|
||||
}
|
||||
|
||||
function create_bridge()
|
||||
{
|
||||
brctl addbr "$BRIDGE"
|
||||
brctl stp "$BRIDGE" on
|
||||
brctl setfd "$BRIDGE" 0
|
||||
ifconfig "$BRIDGE" "$GATEWAY" netmask "$NETMASK" up
|
||||
}
|
||||
|
||||
function enable_ip_forward()
|
||||
{
|
||||
echo 1 > /proc/sys/net/ipv4/ip_forward
|
||||
}
|
||||
|
||||
function add_filter_rules()
|
||||
{
|
||||
iptables -t nat -A POSTROUTING -s "$NETWORK"/"$NETMASK" \
|
||||
! -d "$NETWORK"/"$NETMASK" -j MASQUERADE
|
||||
}
|
||||
|
||||
function start_dnsmasq()
|
||||
{
|
||||
# 禁止重复运行dnsmasq
|
||||
ps -ef | grep "dnsmasq" | grep -v "grep" &> /dev/null
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "dnsmasq 已经在运行"
|
||||
return 1
|
||||
fi
|
||||
dnsmasq \
|
||||
--strict-order \
|
||||
--except-interface=lo \
|
||||
--interface=$BRIDGE \
|
||||
--listen-address=$GATEWAY \
|
||||
--bind-interfaces \
|
||||
--dhcp-range=$DHCPRANGE \
|
||||
--conf-file="" \
|
||||
--pid-file=/var/run/qemu-dhcp-$BRIDGE.pid \
|
||||
--dhcp-leasefile=/var/run/qemu-dhcp-$BRIDGE.leases \
|
||||
--dhcp-no-override \
|
||||
${TFTPROOT:+"--enable-tftp"} \
|
||||
${TFTPROOT:+"--tftp-root=$TFTPROOT"} \
|
||||
${BOOTP:+"--dhcp-boot=$BOOTP"}
|
||||
}
|
||||
|
||||
function setup_bridge_nat()
|
||||
{
|
||||
check_bridge "$BRIDGE"
|
||||
if [ $? -eq 0 ]; then
|
||||
create_bridge
|
||||
fi
|
||||
enable_ip_forward
|
||||
add_filter_rules "$BRIDGE"
|
||||
start_dnsmasq "$BRIDGE"
|
||||
}
|
||||
|
||||
# 安装前需要检查$1参数
|
||||
if [ -n "$1" ]; then
|
||||
setup_bridge_nat
|
||||
brctl addif "$BRIDGE" "$1"
|
||||
ifconfig "$1" 0.0.0.0 up
|
||||
exit 0
|
||||
else
|
||||
echo "发现错误:没有指定接口"
|
||||
exit 1
|
||||
fi
|
@ -1,9 +1,40 @@
|
||||
check_dependencies()
|
||||
{
|
||||
# Check if qemu is installed
|
||||
if [ -z "$(which qemu-system-x86_64)" ]; then
|
||||
echo "Please install qemu first!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if brctl is installed
|
||||
if [ -z "$(which brctl)" ]; then
|
||||
echo "Please install bridge-utils first!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if dnsmasq is installed
|
||||
if [ -z "$(which dnsmasq)" ]; then
|
||||
echo "Please install dnsmasq first!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if iptable is installed
|
||||
if [ -z "$(which iptables)" ]; then
|
||||
echo "Please install iptables first!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
check_dependencies
|
||||
|
||||
# 进行启动前检查
|
||||
flag_can_run=1
|
||||
ARGS=`getopt -o p -l bios:,display: -- "$@"`
|
||||
eval set -- "${ARGS}"
|
||||
echo "$@"
|
||||
allflags=$(qemu-system-x86_64 -cpu help | awk '/flags/ {y=1; getline}; y {print}' | tr ' ' '\n' | grep -Ev "^$" | sed -r 's|^|+|' | tr '\n' ',' | sed -r "s|,$||")
|
||||
allflags=
|
||||
# allflags=$(qemu-system-x86_64 -cpu help | awk '/flags/ {y=1; getline}; y {print}' | tr ' ' '\n' | grep -Ev "^$" | sed -r 's|^|+|' | tr '\n' ',' | sed -r "s|,$||")
|
||||
ARCH="x86_64"
|
||||
#ARCH="i386"
|
||||
# 请根据自己的需要,在-d 后方加入所需的 trace 事件
|
||||
@ -17,7 +48,6 @@ if [ $(uname) == Darwin ]; then
|
||||
qemu_accel=hvf
|
||||
fi
|
||||
|
||||
|
||||
QEMU=qemu-system-x86_64
|
||||
QEMU_DISK_IMAGE="../bin/disk.img"
|
||||
QEMU_MEMORY="512M"
|
||||
@ -29,7 +59,10 @@ QEMU_RTC_CLOCK="clock=host,base=localtime"
|
||||
QEMU_SERIAL="file:../serial_opt.txt"
|
||||
QEMU_DRIVE="id=disk,file=${QEMU_DISK_IMAGE},if=none"
|
||||
|
||||
QEMU_DEVICES="-device ahci,id=ahci -device ide-hd,drive=disk,bus=ahci.0 -nic user,model=virtio-net-pci -usb -device qemu-xhci,id=xhci,p2=8,p3=4 -machine accel=${qemu_accel} -machine q35"
|
||||
|
||||
# ps: 下面这条使用tap的方式,无法dhcp获取到ip,暂时不知道为什么
|
||||
# QEMU_DEVICES="-device ahci,id=ahci -device ide-hd,drive=disk,bus=ahci.0 -net nic,netdev=nic0 -netdev tap,id=nic0,model=virtio-net-pci,script=qemu/ifup-nat,downscript=qemu/ifdown-nat -usb -device qemu-xhci,id=xhci,p2=8,p3=4 -machine accel=${qemu_accel} -machine q35 "
|
||||
QEMU_DEVICES="-device ahci,id=ahci -device ide-hd,drive=disk,bus=ahci.0 -nic user,model=virtio-net-pci,hostfwd=tcp::12580-:12580 -usb -device qemu-xhci,id=xhci,p2=8,p3=4 -machine accel=${qemu_accel} -machine q35 "
|
||||
|
||||
QEMU_ARGUMENT="-d ${QEMU_DISK_IMAGE} -m ${QEMU_MEMORY} -smp ${QEMU_SMP} -boot order=d -monitor ${QEMU_MONITOR} -d ${qemu_trace_std} "
|
||||
|
||||
|
Reference in New Issue
Block a user