mirror of
https://github.com/Waujito/youtubeUnblock.git
synced 2025-12-06 11:36:45 +03:00
Merge branch 'dev'
This commit is contained in:
54
.github/workflows/build-ci.yml
vendored
54
.github/workflows/build-ci.yml
vendored
@@ -16,12 +16,11 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
version: ${{ steps.gh.outputs.version }}
|
||||
release: ${{ steps.gh.outputs.release }}
|
||||
sha: ${{ steps.gh.outputs.sha }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: 'openwrt'
|
||||
|
||||
- name: GH
|
||||
id: gh
|
||||
@@ -30,7 +29,8 @@ jobs:
|
||||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
shell: bash
|
||||
run: |
|
||||
echo "version=$(cat youtubeUnblock/Makefile | grep PKG_VERSION | sed 's/PKG_VERSION:=//')" >> $GITHUB_OUTPUT
|
||||
echo "version=$(cat Makefile | grep "PKG_VERSION :=" | sed 's/PKG_VERSION := //')" >> $GITHUB_OUTPUT
|
||||
echo "release=$(cat Makefile | grep "PKG_RELEASE :=" | sed 's/PKG_RELEASE := //')" >> $GITHUB_OUTPUT
|
||||
if [[ "${{ github.event_name }}" != "pull_request" ]]; then
|
||||
echo "sha=$(echo ${GITHUB_SHA::7})" >> $GITHUB_OUTPUT
|
||||
else
|
||||
@@ -72,6 +72,7 @@ jobs:
|
||||
ARCH: ${{ matrix.arch }}
|
||||
CCACHE_DIR: ${{ github.workspace }}/.ccache
|
||||
VERSION: ${{ needs.prepare.outputs.version }}
|
||||
RELEASE: ${{ needs.prepare.outputs.release }}
|
||||
SHA: ${{ needs.prepare.outputs.sha }}
|
||||
shell: alpine.sh {0}
|
||||
run: |
|
||||
@@ -85,7 +86,7 @@ jobs:
|
||||
make -j$(nproc) CC="ccache gcc -static-libgcc -static" || exit 1
|
||||
strip -s build/youtubeUnblock
|
||||
cp -va build/youtubeUnblock .
|
||||
tar -czvf youtubeUnblock-$VERSION-$SHA-$PLATFORM-static.tar.gz youtubeUnblock youtubeUnblock.service README.md
|
||||
tar -czvf youtubeUnblock-$VERSION-$RELEASE-$SHA-$PLATFORM-static.tar.gz youtubeUnblock youtubeUnblock.service README.md
|
||||
ccache --show-stats
|
||||
|
||||
- name: Upload artifacts
|
||||
@@ -114,6 +115,8 @@ jobs:
|
||||
tool: mips-unknown-linux-musl
|
||||
- arch: mipssf
|
||||
tool: mips-unknown-linux-muslsf
|
||||
- arch: armv7sf
|
||||
tool: armv7-unknown-linux-musleabi
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
@@ -135,6 +138,7 @@ jobs:
|
||||
ARCH: ${{ matrix.arch }}
|
||||
TOOL: ${{ matrix.tool }}
|
||||
VERSION: ${{ needs.prepare.outputs.version }}
|
||||
RELEASE: ${{ needs.prepare.outputs.release }}
|
||||
SHA: ${{ needs.prepare.outputs.sha }}
|
||||
run: |
|
||||
make -j$(nproc) \
|
||||
@@ -146,13 +150,13 @@ jobs:
|
||||
CROSS_COMPILE_PLATFORM=$TOOL || exit 1
|
||||
$TOOL-strip -s build/youtubeUnblock
|
||||
cp -va build/youtubeUnblock .
|
||||
tar -czvf youtubeUnblock-$VERSION-$SHA-$ARCH-static.tar.gz youtubeUnblock youtubeUnblock.service README.md
|
||||
tar -czvf youtubeUnblock-$VERSION-$RELEASE-$SHA-$ARCH-static.tar.gz youtubeUnblock youtubeUnblock.service README.md
|
||||
|
||||
- name: Upload artifacts
|
||||
if: steps.build.outcome == 'success'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: static-${{ matrix.arch }}
|
||||
name: youtubeUnblock-static-${{ matrix.arch }}
|
||||
path: ./**/youtubeUnblock*.tar.gz
|
||||
|
||||
build-openwrt:
|
||||
@@ -201,14 +205,16 @@ jobs:
|
||||
- name: Prepare build
|
||||
env:
|
||||
VERSION: ${{ needs.prepare.outputs.version }}
|
||||
RELEASE: ${{ needs.prepare.outputs.release }}
|
||||
SHA: ${{ needs.prepare.outputs.sha }}
|
||||
run: |
|
||||
sed -i "s/PKG_REV:=.*$/PKG_REV:=$SHA/;s/PKG_VERSION:=.*$/PKG_VERSION:=$VERSION-$SHA/" youtubeUnblock/Makefile
|
||||
sed -i "s/PKG_REV:=.*$/PKG_REV:=$SHA/;s/PKG_VERSION:=.*$/PKG_VERSION:=$VERSION-$RELEASE-$SHA/" youtubeUnblock/Makefile
|
||||
|
||||
- name: Build packages
|
||||
id: build
|
||||
env:
|
||||
VERSION: ${{ needs.prepare.outputs.version }}
|
||||
RELEASE: ${{ needs.prepare.outputs.release }}
|
||||
SHA: ${{ needs.prepare.outputs.sha }}
|
||||
working-directory: /builder
|
||||
run: |
|
||||
@@ -218,7 +224,7 @@ jobs:
|
||||
./scripts/feeds install -a -p youtubeUnblock
|
||||
make defconfig
|
||||
make package/youtubeUnblock/compile V=s
|
||||
mv $(find ./bin -type f -name 'youtubeUnblock*.ipk') ./youtubeUnblock-$VERSION-$SHA-${{ matrix.arch }}-${{ matrix.branch }}.ipk
|
||||
mv $(find ./bin -type f -name 'youtubeUnblock*.ipk') ./youtubeUnblock-$VERSION-$RELEASE-$SHA-${{ matrix.arch }}-${{ matrix.branch }}.ipk
|
||||
|
||||
- name: Upload packages
|
||||
if: steps.build.outcome == 'success'
|
||||
@@ -243,14 +249,16 @@ jobs:
|
||||
- name: Prepare build
|
||||
env:
|
||||
VERSION: ${{ needs.prepare.outputs.version }}
|
||||
RELEASE: ${{ needs.prepare.outputs.release }}
|
||||
SHA: ${{ needs.prepare.outputs.sha }}
|
||||
run: |
|
||||
sed -i "s/PKG_REV:=.*$/PKG_REV:=$SHA/;s/PKG_VERSION:=.*$/PKG_VERSION:=$VERSION-$SHA/" youtubeUnblock/Makefile
|
||||
sed -i "s/PKG_REV:=.*$/PKG_REV:=$SHA/;s/PKG_VERSION:=.*$/PKG_VERSION:=$VERSION-$RELEASE-$SHA/" youtubeUnblock/Makefile
|
||||
|
||||
- name: Build packages
|
||||
id: build
|
||||
env:
|
||||
VERSION: ${{ needs.prepare.outputs.version }}
|
||||
RELEASE: ${{ needs.prepare.outputs.release }}
|
||||
SHA: ${{ needs.prepare.outputs.sha }}
|
||||
working-directory: /builder
|
||||
run: |
|
||||
@@ -260,7 +268,7 @@ jobs:
|
||||
./scripts/feeds install -a -p youtubeUnblock
|
||||
make defconfig
|
||||
make package/luci-app-youtubeUnblock/compile V=s
|
||||
mv $(find ./bin -type f -name 'luci-app-youtubeUnblock*.ipk') ./luci-app-youtubeUnblock-$VERSION-$SHA.ipk
|
||||
mv $(find ./bin -type f -name 'luci-app-youtubeUnblock*.ipk') ./luci-app-youtubeUnblock-$VERSION-$RELEASE-$SHA.ipk
|
||||
|
||||
- name: Upload packages
|
||||
if: steps.build.outcome == 'success'
|
||||
@@ -281,6 +289,11 @@ jobs:
|
||||
- mips-3.4
|
||||
- mipsel-3.4
|
||||
- x64-3.2
|
||||
include:
|
||||
- arch: armv7-2.6
|
||||
k26: true
|
||||
- arch: x86-2.6
|
||||
k26: true
|
||||
steps:
|
||||
- name: Set up Entware docker container
|
||||
run: |
|
||||
@@ -302,10 +315,19 @@ jobs:
|
||||
docker run --rm --mount source=entware-home,target=/home/me -w /home/me ubuntu bash -c 'cp -r ./backup_vol/* ./'
|
||||
docker run --rm --mount source=entware-home,target=/home/me -w /home/me ubuntu bash -c 'chown -R 1000:1000 ./* ./'
|
||||
|
||||
- name: Build Entware
|
||||
if: steps.cache-restore.outputs.cache-hit != 'true'
|
||||
- name: Obtain Entware
|
||||
if: ${{ steps.cache-restore.outputs.cache-hit != 'true' && ! matrix.k26 }}
|
||||
run: |
|
||||
docker run --rm -i --mount source=entware-home,target=/home/me -w /home/me --name builder builder git clone --depth 1 https://github.com/Entware/Entware.git
|
||||
|
||||
- name: Obtain Entware k2.6
|
||||
if: ${{ steps.cache-restore.outputs.cache-hit != 'true' && matrix.k26 }}
|
||||
run: |
|
||||
docker run --rm -i --mount source=entware-home,target=/home/me -w /home/me --name builder builder git clone --depth 1 https://github.com/Entware/Entware.git -b k2.6
|
||||
|
||||
- name: Build Entware
|
||||
if: steps.cache-restore.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
docker run --rm -i --mount source=entware-home,target=/home/me -w /home/me/Entware --name builder builder make package/symlinks
|
||||
docker run --rm -i --mount source=entware-home,target=/home/me -w /home/me/Entware --name builder builder cp -v configs/${{ matrix.arch }}.config .config
|
||||
docker run --rm -i --mount source=entware-home,target=/home/me -w /home/me/Entware --name builder builder make -j$(nproc) toolchain/install
|
||||
@@ -327,9 +349,10 @@ jobs:
|
||||
- name: Prepare build
|
||||
env:
|
||||
VERSION: ${{ needs.prepare.outputs.version }}
|
||||
RELEASE: ${{ needs.prepare.outputs.release }}
|
||||
SHA: ${{ needs.prepare.outputs.sha }}
|
||||
run: |
|
||||
sed -i "s/PKG_REV:=.*$/PKG_REV:=$SHA/;s/PKG_VERSION:=.*$/PKG_VERSION:=$VERSION-$SHA/" youtubeUnblock/Makefile
|
||||
sed -i "s/PKG_REV:=.*$/PKG_REV:=$SHA/;s/PKG_VERSION:=.*$/PKG_VERSION:=$VERSION-$RELEASE-$SHA/" youtubeUnblock/Makefile
|
||||
|
||||
- name: Build packages
|
||||
id: build
|
||||
@@ -345,6 +368,7 @@ jobs:
|
||||
shell: bash
|
||||
env:
|
||||
VERSION: ${{ needs.prepare.outputs.version }}
|
||||
RELEASE: ${{ needs.prepare.outputs.release }}
|
||||
SHA: ${{ needs.prepare.outputs.sha }}
|
||||
run: |
|
||||
mkdir output
|
||||
@@ -352,7 +376,7 @@ jobs:
|
||||
rm -rf youtubeUnblock || true
|
||||
mkdir youtubeUnblock
|
||||
bash -c "cp -r ./output/* youtubeUnblock"
|
||||
tar -czvf youtubeUnblock-$VERSION-$SHA-${{ matrix.arch }}-entware.tar.gz youtubeUnblock
|
||||
tar -czvf youtubeUnblock-$VERSION-$RELEASE-$SHA-${{ matrix.arch }}-entware.tar.gz youtubeUnblock
|
||||
|
||||
- name: Upload packages
|
||||
if: steps.build.outcome == 'success'
|
||||
@@ -364,7 +388,7 @@ jobs:
|
||||
|
||||
pre-release:
|
||||
if: github.event_name != 'pull_request' && github.ref_name == 'main'
|
||||
needs: [build-static, build-static-cross, build-openwrt, build-entware]
|
||||
needs: [build-static, build-static-cross, build-openwrt, build-entware, build-openwrt-luci]
|
||||
permissions:
|
||||
contents: write
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
7
Makefile
7
Makefile
@@ -1,6 +1,13 @@
|
||||
USPACE_TARGETS := default all install uninstall dev run_dev
|
||||
KMAKE_TARGETS := kmake kload kunload kreload xmod xtclean
|
||||
|
||||
PKG_VERSION := 1.0.0
|
||||
PKG_RELEASE := 4
|
||||
|
||||
PKG_FULLVERSION := $(PKG_VERSION)-$(PKG_RELEASE)
|
||||
|
||||
export PKG_VERSION PKG_RELEASE PKG_FULLVERSION
|
||||
|
||||
.PHONY: $(USPACE_TARGETS) $(KMAKE_TARGETS) clean
|
||||
$(USPACE_TARGETS):
|
||||
@$(MAKE) -f uspace.mk $@
|
||||
|
||||
30
Padavan.md
Normal file
30
Padavan.md
Normal file
@@ -0,0 +1,30 @@
|
||||
## Padavan
|
||||
На падаване есть раздел, доступный для записи (/etc/storage), и, докинув нужные модули, можно запустить youtubeUblock на уже установленной прошивке без USB. Установка самого youtubeUblock мало будет отличаться от классичкской установки. Наибольшая сложность заключается в получении модулей ядра специально для вашего роутера.
|
||||
|
||||
**Версия youtubeUblock должна быть не меньше v1.0.0-rc4.**
|
||||
|
||||
### Сборка прошивки с модулями
|
||||
|
||||
Необходимо собрать ядро с модулями nfqueue. Собирать можно у себя локально, а можно и в github actions (https://github.com/shvchk/padavan-builder-workflow)
|
||||
|
||||
Добавить строки ниже в `padavan-ng/trunk/configs/boards/TPLINK/TL_C5-V4/kernel-3.4.x.config` (вместо TPLINK/TL_C5-V4 нужно выбрать свою модель):
|
||||
|
||||
```sh
|
||||
CONFIG_NETFILTER_NETLINK=m
|
||||
CONFIG_NETFILTER_NETLINK_QUEUE=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
CONFIG_IP6_NF_QUEUE=m
|
||||
```
|
||||
|
||||
Сборка
|
||||
```sh
|
||||
cd padavan-ng/trunk
|
||||
cp configs/templates/tplink/tl_c5-v4.config .config
|
||||
./build_firmware.sh
|
||||
```
|
||||
Если финальный размер превышает максимум, то можно отключить что-нибудь в .config, например FTP.
|
||||
|
||||
После сборки необходимо установить прошивку на роутер. Подробнее в гитлабе падавана: https://gitlab.com/hadzhioglu/padavan-ng. Как устанавливать: https://4pda.to/forum/index.php?showtopic=975687&st=12980#Spoil-115912586-5
|
||||
|
||||
Далее скачать youtubeUnblock, закинуть его на роутер, добавить правила фаервола и запустить. Можно скачивать static бинарник и запускать вручную, а можно загрузить entware на usb или в память, и поставить соответствующую версию youtubeUblock.
|
||||
@@ -21,6 +21,7 @@
|
||||
- [Building on host system](#building-on-host-system)
|
||||
- [Building on any kernel](#building-on-any-kernel)
|
||||
- [Building with openwrt SDK](#building-with-openwrt-sdk)
|
||||
- [Padavan](#padavan)
|
||||
|
||||
|
||||
# youtubeUnblock
|
||||
@@ -390,4 +391,11 @@ make package/kyoutubeUnblock/compile V=s
|
||||
|
||||
When the commands finish, the module is ready. Find it with `find bin -name "kmod-youtubeUnblock*.ipk"`, copy to your host and install to the router via gui software interface. The module should start immediately. If not, do `modprobe kyoutubeUnblock`.
|
||||
|
||||
|
||||
## Padavan
|
||||
YoutubeUnblock may also run on Padavan. [Check the manual here\[rus\]](Padavan.md)
|
||||
|
||||
|
||||
>If you have any questions/suggestions/problems feel free to open an [issue](https://github.com/Waujito/youtubeUnblock/issues).
|
||||
|
||||
|
||||
|
||||
11
args.c
11
args.c
@@ -110,8 +110,13 @@ static long parse_numeric_option(const char* value) {
|
||||
}
|
||||
|
||||
void print_version() {
|
||||
printf("youtubeUnblock\n");
|
||||
printf("Bypasses deep packet inspection systems that relies on SNI\n");
|
||||
printf("youtubeUnblock"
|
||||
#if defined(PKG_VERSION)
|
||||
" " PKG_VERSION
|
||||
#endif
|
||||
"\n"
|
||||
);
|
||||
printf("Bypasses deep packet inspection systems that rely on SNI\n");
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
@@ -477,7 +482,7 @@ void print_welcome() {
|
||||
}
|
||||
|
||||
printf("Detected %d config sections\n", config.custom_configs_len + 1);
|
||||
printf("The sections will be processed in ordred they goes in this output");
|
||||
printf("The sections will be processed in ordred they goes in this output\n");
|
||||
|
||||
ITER_CONFIG_SECTIONS(section) {
|
||||
int section_number = CONFIG_SECTION_NUMBER(section);
|
||||
|
||||
2
config.h
2
config.h
@@ -185,7 +185,7 @@ if ((fake_bitmask) & strategy)
|
||||
|
||||
// The Maximum Transmission Unit size for rawsocket
|
||||
// Larger packets will be fragmented. Applicable for Chrome's kyber.
|
||||
#define AVAILABLE_MTU 1500
|
||||
#define AVAILABLE_MTU 1400
|
||||
|
||||
#define DEFAULT_QUEUE_NUM 537
|
||||
|
||||
|
||||
2
kmake.mk
2
kmake.mk
@@ -13,7 +13,7 @@ KERNEL_BUILDER_MAKEDIR:=/lib/modules/$(shell uname -r)/build
|
||||
kmake: kmod
|
||||
|
||||
kmod:
|
||||
$(MAKE) -C $(KERNEL_BUILDER_MAKEDIR) M=$(PWD) modules
|
||||
$(MAKE) -C $(KERNEL_BUILDER_MAKEDIR) M=$(PWD) EXTRA_CFLAGS='-DPKG_VERSION=\"$(PKG_FULLVERSION)\"' modules
|
||||
|
||||
kload:
|
||||
insmod kyoutubeUnblock.ko
|
||||
|
||||
@@ -21,8 +21,11 @@
|
||||
#include "utils.h"
|
||||
#include "logging.h"
|
||||
|
||||
#if defined(PKG_VERSION)
|
||||
MODULE_VERSION(PKG_VERSION);
|
||||
#endif
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_VERSION("0.3.2");
|
||||
MODULE_AUTHOR("Vadim Vetrov <vetrovvd@gmail.com>");
|
||||
MODULE_DESCRIPTION("Linux kernel module for youtubeUnblock");
|
||||
|
||||
@@ -80,7 +83,7 @@ static int send_raw_ipv4(const uint8_t *pkt, uint32_t pktlen) {
|
||||
iov.iov_base = (__u8 *)pkt;
|
||||
iov.iov_len = pktlen;
|
||||
|
||||
msg.msg_flags = 0;
|
||||
msg.msg_flags = MSG_DONTWAIT;
|
||||
msg.msg_name = &daddr;
|
||||
msg.msg_namelen = sizeof(struct sockaddr_in);
|
||||
msg.msg_control = NULL;
|
||||
@@ -140,7 +143,7 @@ static int send_raw_ipv6(const uint8_t *pkt, uint32_t pktlen) {
|
||||
iov.iov_base = (__u8 *)pkt;
|
||||
iov.iov_len = pktlen;
|
||||
|
||||
msg.msg_flags = 0;
|
||||
msg.msg_flags = MSG_DONTWAIT;
|
||||
msg.msg_name = &daddr;
|
||||
msg.msg_namelen = sizeof(struct sockaddr_in6);
|
||||
msg.msg_control = NULL;
|
||||
|
||||
3
types.h
3
types.h
@@ -85,6 +85,9 @@
|
||||
|
||||
#endif /* not a KERNEL_SPACE */
|
||||
|
||||
/* An alternative memory allocation strategy for userspace app */
|
||||
// #define ALLOC_MALLOC
|
||||
|
||||
/**
|
||||
* Use NETBUF_ALLOC and NETBUF_FREE as an abstraction of memory allocation.
|
||||
* Do not use it within expressions, consider these defines as separate statements.
|
||||
|
||||
@@ -17,6 +17,8 @@ else
|
||||
override CFLAGS += -Wall -Wpedantic -Wno-unused-variable -std=gnu11
|
||||
endif
|
||||
|
||||
override CFLAGS += -DPKG_VERSION=\"$(PKG_FULLVERSION)\"
|
||||
|
||||
LIBNFNETLINK_CFLAGS := -I$(DEPSDIR)/include
|
||||
LIBNFNETLINK_LIBS := -L$(DEPSDIR)/lib
|
||||
LIBMNL_CFLAGS := -I$(DEPSDIR)/include
|
||||
|
||||
@@ -203,7 +203,7 @@ static int send_raw_ipv4(const uint8_t *pkt, uint32_t pktlen) {
|
||||
pthread_mutex_lock(&rawsocket_lock);
|
||||
|
||||
int sent = sendto(rawsocket,
|
||||
pkt, pktlen, 0,
|
||||
pkt, pktlen, MSG_DONTWAIT,
|
||||
(struct sockaddr *)&daddr, sizeof(daddr));
|
||||
|
||||
if (config.threads != 1)
|
||||
@@ -238,7 +238,7 @@ static int send_raw_ipv6(const uint8_t *pkt, uint32_t pktlen) {
|
||||
pthread_mutex_lock(&rawsocket_lock);
|
||||
|
||||
int sent = sendto(raw6socket,
|
||||
pkt, pktlen, 0,
|
||||
pkt, pktlen, MSG_DONTWAIT,
|
||||
(struct sockaddr *)&daddr, sizeof(daddr));
|
||||
|
||||
lgtrace_addp("rawsocket sent %d", sent);
|
||||
@@ -259,16 +259,27 @@ static int send_raw_socket(const uint8_t *pkt, uint32_t pktlen) {
|
||||
if (config.verbose)
|
||||
printf("Split packet!\n");
|
||||
|
||||
uint8_t buff1[MNL_SOCKET_BUFFER_SIZE];
|
||||
NETBUF_ALLOC(buff1, MNL_SOCKET_BUFFER_SIZE);
|
||||
if (!NETBUF_CHECK(buff1)) {
|
||||
lgerror("Allocation error", -ENOMEM);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
NETBUF_ALLOC(buff2, MNL_SOCKET_BUFFER_SIZE);
|
||||
if (!NETBUF_CHECK(buff2)) {
|
||||
lgerror("Allocation error", -ENOMEM);
|
||||
NETBUF_FREE(buff1);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
uint32_t buff1_size = MNL_SOCKET_BUFFER_SIZE;
|
||||
uint8_t buff2[MNL_SOCKET_BUFFER_SIZE];
|
||||
uint32_t buff2_size = MNL_SOCKET_BUFFER_SIZE;
|
||||
|
||||
if ((ret = tcp_frag(pkt, pktlen, AVAILABLE_MTU-128,
|
||||
buff1, &buff1_size, buff2, &buff2_size)) < 0) {
|
||||
|
||||
errno = -ret;
|
||||
return ret;
|
||||
goto free_buffs;
|
||||
}
|
||||
|
||||
int sent = 0;
|
||||
@@ -276,16 +287,23 @@ static int send_raw_socket(const uint8_t *pkt, uint32_t pktlen) {
|
||||
|
||||
if (status >= 0) sent += status;
|
||||
else {
|
||||
return status;
|
||||
ret = status;
|
||||
goto free_buffs;
|
||||
}
|
||||
|
||||
status = send_raw_socket(buff2, buff2_size);
|
||||
if (status >= 0) sent += status;
|
||||
else {
|
||||
return status;
|
||||
ret = status;
|
||||
goto free_buffs;
|
||||
}
|
||||
|
||||
return sent;
|
||||
ret = sent;
|
||||
|
||||
free_buffs:
|
||||
NETBUF_FREE(buff1)
|
||||
NETBUF_FREE(buff2)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ipvx = netproto_version(pkt, pktlen);
|
||||
@@ -452,7 +470,51 @@ int init_queue(int queue_num) {
|
||||
uint32_t portid = mnl_socket_get_portid(nl);
|
||||
|
||||
struct nlmsghdr *nlh;
|
||||
char buf[BUF_SIZE];
|
||||
NETBUF_ALLOC(bbuf, BUF_SIZE);
|
||||
if (!NETBUF_CHECK(bbuf)) {
|
||||
lgerror("Allocation error", -ENOMEM);
|
||||
goto die_alloc;
|
||||
}
|
||||
char *buf = (char *)bbuf;
|
||||
|
||||
/* Support for kernels versions < 3.8 */
|
||||
// Obsolete and ignored in kernel version 3.8
|
||||
// https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0360ae412d09bc6f4864c801effcb20bfd84520e
|
||||
|
||||
nlh = nfq_nlmsg_put(buf, NFQNL_MSG_CONFIG, queue_num);
|
||||
nfq_nlmsg_cfg_put_cmd(nlh, PF_INET, NFQNL_CFG_CMD_PF_UNBIND);
|
||||
|
||||
if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) {
|
||||
perror("mnl_socket_send");
|
||||
goto die;
|
||||
}
|
||||
|
||||
nlh = nfq_nlmsg_put(buf, NFQNL_MSG_CONFIG, queue_num);
|
||||
nfq_nlmsg_cfg_put_cmd(nlh, PF_INET, NFQNL_CFG_CMD_PF_BIND);
|
||||
|
||||
if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) {
|
||||
perror("mnl_socket_send");
|
||||
goto die;
|
||||
}
|
||||
|
||||
if (config.use_ipv6) {
|
||||
nlh = nfq_nlmsg_put(buf, NFQNL_MSG_CONFIG, queue_num);
|
||||
nfq_nlmsg_cfg_put_cmd(nlh, PF_INET6, NFQNL_CFG_CMD_PF_UNBIND);
|
||||
|
||||
if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) {
|
||||
perror("mnl_socket_send");
|
||||
goto die;
|
||||
}
|
||||
|
||||
nlh = nfq_nlmsg_put(buf, NFQNL_MSG_CONFIG, queue_num);
|
||||
nfq_nlmsg_cfg_put_cmd(nlh, PF_INET6, NFQNL_CFG_CMD_PF_BIND);
|
||||
|
||||
if (mnl_socket_sendto(nl, nlh, nlh->nlmsg_len) < 0) {
|
||||
perror("mnl_socket_send");
|
||||
goto die;
|
||||
}
|
||||
}
|
||||
/* End of support for kernel versions < 3.8 */
|
||||
|
||||
nlh = nfq_nlmsg_put(buf, NFQNL_MSG_CONFIG, queue_num);
|
||||
nfq_nlmsg_cfg_put_cmd(nlh, AF_INET, NFQNL_CFG_CMD_BIND);
|
||||
@@ -510,10 +572,13 @@ int init_queue(int queue_num) {
|
||||
}
|
||||
|
||||
|
||||
NETBUF_FREE(bbuf)
|
||||
close_socket(&nl);
|
||||
return 0;
|
||||
|
||||
die:
|
||||
NETBUF_FREE(bbuf)
|
||||
die_alloc:
|
||||
close_socket(&nl);
|
||||
return -1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user