cmm offload is now working
This commit is contained in:
52
devtools/eth2-dhcp.yaml
Normal file
52
devtools/eth2-dhcp.yaml
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: test-lan-dhcp-config
|
||||||
|
namespace: mono-system
|
||||||
|
data:
|
||||||
|
dnsmasq.conf: |
|
||||||
|
interface=eth2
|
||||||
|
bind-interfaces
|
||||||
|
dhcp-range=192.168.50.100,192.168.50.200,255.255.255.0,12h
|
||||||
|
dhcp-option=3,192.168.50.1
|
||||||
|
dhcp-option=6,1.1.1.1,8.8.8.8
|
||||||
|
log-dhcp
|
||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: DaemonSet
|
||||||
|
metadata:
|
||||||
|
name: test-lan-dhcp
|
||||||
|
namespace: mono-system
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: test-lan-dhcp
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: test-lan-dhcp
|
||||||
|
spec:
|
||||||
|
hostNetwork: true
|
||||||
|
nodeSelector:
|
||||||
|
kubernetes.io/hostname: monok8s-master
|
||||||
|
containers:
|
||||||
|
- name: dnsmasq
|
||||||
|
image: alpine:3.23
|
||||||
|
securityContext:
|
||||||
|
privileged: true
|
||||||
|
command:
|
||||||
|
- /bin/sh
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
apk add --no-cache dnsmasq iproute2 iptables
|
||||||
|
ip addr replace 192.168.50.1/24 dev eth2
|
||||||
|
ip link set eth2 up
|
||||||
|
exec dnsmasq --no-daemon --conf-file=/etc/dnsmasq.conf
|
||||||
|
volumeMounts:
|
||||||
|
- name: config
|
||||||
|
mountPath: /etc/dnsmasq.conf
|
||||||
|
subPath: dnsmasq.conf
|
||||||
|
volumes:
|
||||||
|
- name: config
|
||||||
|
configMap:
|
||||||
|
name: test-lan-dhcp-config
|
||||||
@@ -167,6 +167,19 @@ RUN cd /src/ASK && \
|
|||||||
test ! -s /tmp/ask-module-patches.list || xargs -a /tmp/ask-module-patches.list git apply --check && \
|
test ! -s /tmp/ask-module-patches.list || xargs -a /tmp/ask-module-patches.list git apply --check && \
|
||||||
test ! -s /tmp/ask-module-patches.list || xargs -a /tmp/ask-module-patches.list git apply
|
test ! -s /tmp/ask-module-patches.list || xargs -a /tmp/ask-module-patches.list git apply
|
||||||
|
|
||||||
|
# Verify ct enum
|
||||||
|
COPY scripts/check-ctenum/kernel_ctenum.c /src/check-ctenum/kernel_ctenum.c
|
||||||
|
|
||||||
|
RUN cd /src/linux \
|
||||||
|
&& make ARCH="${ARCH}" CROSS_COMPILE="${CROSS_COMPILE}" \
|
||||||
|
headers_install INSTALL_HDR_PATH=/tmp/kernel-headers \
|
||||||
|
&& cc -I/tmp/kernel-headers/include \
|
||||||
|
/src/check-ctenum/kernel_ctenum.c \
|
||||||
|
-o /tmp/kernel_ctenum \
|
||||||
|
&& /tmp/kernel_ctenum | sort > /src/kernel_ctenum.txt
|
||||||
|
|
||||||
|
COPY scripts/check-ctenum/libnfct_ctenum.c /src/check-ctenum/libnfct_ctenum.c
|
||||||
|
|
||||||
# Build patched libnfnetlink + libnetfilter_conntrack into the musl sysroot.
|
# Build patched libnfnetlink + libnetfilter_conntrack into the musl sysroot.
|
||||||
# These are needed by cmm through pkg-config.
|
# These are needed by cmm through pkg-config.
|
||||||
RUN mkdir -p "${ASK_DIR}/sources" && \
|
RUN mkdir -p "${ASK_DIR}/sources" && \
|
||||||
@@ -194,6 +207,15 @@ RUN mkdir -p "${ASK_DIR}/sources" && \
|
|||||||
| sort > /tmp/libnfct-patches.list && \
|
| sort > /tmp/libnfct-patches.list && \
|
||||||
test ! -s /tmp/libnfct-patches.list || xargs -a /tmp/libnfct-patches.list git apply --check && \
|
test ! -s /tmp/libnfct-patches.list || xargs -a /tmp/libnfct-patches.list git apply --check && \
|
||||||
test ! -s /tmp/libnfct-patches.list || xargs -a /tmp/libnfct-patches.list git apply && \
|
test ! -s /tmp/libnfct-patches.list || xargs -a /tmp/libnfct-patches.list git apply && \
|
||||||
|
####### Ensure parities for KERNEL <-> libnfct's enum #######
|
||||||
|
cd /src/libnetfilter_conntrack \
|
||||||
|
&& cc -I. -I"${SYSROOT}/include" /src/check-ctenum/libnfct_ctenum.c -o /tmp/libnfct_ctenum \
|
||||||
|
&& /tmp/libnfct_ctenum | sort > /tmp/libnfct_ctenum.txt \
|
||||||
|
&& echo "libnfct conntrack enum values:" \
|
||||||
|
&& cat /tmp/libnfct_ctenum.txt \
|
||||||
|
&& echo "Comparing kernel/libnfct conntrack enum ABI:" \
|
||||||
|
&& diff -u /src/kernel_ctenum.txt /tmp/libnfct_ctenum.txt && \
|
||||||
|
####### End #######
|
||||||
PKG_CONFIG_PATH="${SYSROOT}/lib/pkgconfig" \
|
PKG_CONFIG_PATH="${SYSROOT}/lib/pkgconfig" \
|
||||||
CC=aarch64-linux-musl-gcc AR=aarch64-linux-musl-ar RANLIB=aarch64-linux-musl-ranlib \
|
CC=aarch64-linux-musl-gcc AR=aarch64-linux-musl-ar RANLIB=aarch64-linux-musl-ranlib \
|
||||||
./configure --host="${HOST}" --prefix="${SYSROOT}" \
|
./configure --host="${HOST}" --prefix="${SYSROOT}" \
|
||||||
|
|||||||
@@ -0,0 +1,158 @@
|
|||||||
|
diff --git a/src/conntrack/parse_mnl.c b/src/conntrack/parse_mnl.c
|
||||||
|
index 72abc67..941075a 100644
|
||||||
|
--- a/src/conntrack/parse_mnl.c
|
||||||
|
+++ b/src/conntrack/parse_mnl.c
|
||||||
|
@@ -13,6 +13,24 @@
|
||||||
|
#include <libmnl/libmnl.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include <endian.h>
|
||||||
|
+#include <stdio.h>
|
||||||
|
+#include <stdarg.h>
|
||||||
|
+
|
||||||
|
+static void ask_nfct_dbg(const char *fmt, ...)
|
||||||
|
+{
|
||||||
|
+ FILE *f;
|
||||||
|
+ va_list ap;
|
||||||
|
+
|
||||||
|
+ f = fopen("/tmp/libnfct-cmm.log", "a");
|
||||||
|
+ if (!f)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ va_start(ap, fmt);
|
||||||
|
+ vfprintf(f, fmt, ap);
|
||||||
|
+ va_end(ap);
|
||||||
|
+
|
||||||
|
+ fclose(f);
|
||||||
|
+}
|
||||||
|
|
||||||
|
static int
|
||||||
|
nfct_parse_ip_attr_cb(const struct nlattr *attr, void *data)
|
||||||
|
@@ -863,25 +881,44 @@ nfct_parse_comcerto_fp_attr_cb(const struct nlattr *attr, void *data)
|
||||||
|
const struct nlattr **tb = data;
|
||||||
|
int type = mnl_attr_get_type(attr);
|
||||||
|
|
||||||
|
- if (mnl_attr_type_valid(attr, CTA_COMCERTO_FP_MAX) < 0)
|
||||||
|
- return MNL_CB_OK;
|
||||||
|
+ ask_nfct_dbg("nested fp attr raw_type=0x%x type=%u len=%u payload_len=%u\n",
|
||||||
|
+ attr->nla_type, type, attr->nla_len,
|
||||||
|
+ mnl_attr_get_payload_len(attr));
|
||||||
|
+
|
||||||
|
+ if (mnl_attr_type_valid(attr, CTA_COMCERTO_FP_MAX) < 0) {
|
||||||
|
+ ask_nfct_dbg("nested fp attr type invalid raw_type=0x%x type=%u max=%u\n",
|
||||||
|
+ attr->nla_type, type, CTA_COMCERTO_FP_MAX);
|
||||||
|
+ return MNL_CB_OK;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
switch(type) {
|
||||||
|
case CTA_COMCERTO_FP_MARK:
|
||||||
|
case CTA_COMCERTO_FP_IFINDEX:
|
||||||
|
case CTA_COMCERTO_FP_IIF:
|
||||||
|
case CTA_COMCERTO_FP_UNDERLYING_IIF:
|
||||||
|
- if (mnl_attr_validate(attr, MNL_TYPE_U32) < 0)
|
||||||
|
- return MNL_CB_OK;
|
||||||
|
+ if (mnl_attr_validate(attr, MNL_TYPE_U32) < 0) {
|
||||||
|
+ ask_nfct_dbg("nested fp attr U32 validation failed type=%u raw_type=0x%x len=%u payload_len=%u\n",
|
||||||
|
+ type, attr->nla_type, attr->nla_len,
|
||||||
|
+ mnl_attr_get_payload_len(attr));
|
||||||
|
+ return MNL_CB_OK;
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
case CTA_COMCERTO_FP_UNDERLYING_VID:
|
||||||
|
- if (mnl_attr_validate(attr, MNL_TYPE_U16) < 0)
|
||||||
|
- return MNL_CB_OK;
|
||||||
|
+ if (mnl_attr_validate(attr, MNL_TYPE_U16) < 0) {
|
||||||
|
+ ask_nfct_dbg("nested fp attr U16 validation failed type=%u raw_type=0x%x len=%u payload_len=%u\n",
|
||||||
|
+ type, attr->nla_type, attr->nla_len,
|
||||||
|
+ mnl_attr_get_payload_len(attr));
|
||||||
|
+ return MNL_CB_OK;
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
case CTA_COMCERTO_FP_XFRM_HANDLE:
|
||||||
|
/* 4 x u32 = 16 bytes */
|
||||||
|
- if (mnl_attr_validate2(attr, MNL_TYPE_UNSPEC, 16) < 0)
|
||||||
|
- return MNL_CB_OK;
|
||||||
|
+ if (mnl_attr_validate2(attr, MNL_TYPE_UNSPEC, 16) < 0) {
|
||||||
|
+ ask_nfct_dbg("nested fp attr XFRM validation failed type=%u raw_type=0x%x len=%u payload_len=%u\n",
|
||||||
|
+ type, attr->nla_type, attr->nla_len,
|
||||||
|
+ mnl_attr_get_payload_len(attr));
|
||||||
|
+ return MNL_CB_OK;
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tb[type] = attr;
|
||||||
|
@@ -893,9 +930,23 @@ nfct_parse_comcerto_fp(const struct nlattr *attr, struct nf_conntrack *ct,
|
||||||
|
int dir)
|
||||||
|
{
|
||||||
|
struct nlattr *tb[CTA_COMCERTO_FP_MAX+1] = {};
|
||||||
|
-
|
||||||
|
- if (mnl_attr_parse_nested(attr, nfct_parse_comcerto_fp_attr_cb, tb) < 0)
|
||||||
|
- return -1;
|
||||||
|
+ ask_nfct_dbg("enter nfct_parse_comcerto_fp dir=%d outer_raw_type=0x%x outer_type=%u len=%u payload_len=%u\n",
|
||||||
|
+ dir, attr->nla_type, mnl_attr_get_type(attr),
|
||||||
|
+ attr->nla_len, mnl_attr_get_payload_len(attr));
|
||||||
|
+
|
||||||
|
+ if (mnl_attr_parse_nested(attr, nfct_parse_comcerto_fp_attr_cb, tb) < 0) {
|
||||||
|
+ ask_nfct_dbg("mnl_attr_parse_nested FAILED dir=%d\n", dir);
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ ask_nfct_dbg("fp nested result dir=%d mark=%d ifindex=%d iif=%d underlying_iif=%d vid=%d xfrm=%d\n",
|
||||||
|
+ dir,
|
||||||
|
+ !!tb[CTA_COMCERTO_FP_MARK],
|
||||||
|
+ !!tb[CTA_COMCERTO_FP_IFINDEX],
|
||||||
|
+ !!tb[CTA_COMCERTO_FP_IIF],
|
||||||
|
+ !!tb[CTA_COMCERTO_FP_UNDERLYING_IIF],
|
||||||
|
+ !!tb[CTA_COMCERTO_FP_UNDERLYING_VID],
|
||||||
|
+ !!tb[CTA_COMCERTO_FP_XFRM_HANDLE]);
|
||||||
|
|
||||||
|
if (tb[CTA_COMCERTO_FP_IIF]) {
|
||||||
|
ct->fp_info[dir].iif =
|
||||||
|
@@ -984,6 +1035,11 @@ nfct_parse_conntrack_attr_cb(const struct nlattr *attr, void *data)
|
||||||
|
{
|
||||||
|
const struct nlattr **tb = data;
|
||||||
|
int type = mnl_attr_get_type(attr);
|
||||||
|
+ if (type == CTA_LAYERSCAPE_FP_ORIG || type == CTA_LAYERSCAPE_FP_REPLY) {
|
||||||
|
+ ask_nfct_dbg("top fp attr raw_type=0x%x type=%u len=%u payload_len=%u\n",
|
||||||
|
+ attr->nla_type, type, attr->nla_len,
|
||||||
|
+ mnl_attr_get_payload_len(attr));
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (mnl_attr_type_valid(attr, CTA_MAX) < 0)
|
||||||
|
return MNL_CB_OK;
|
||||||
|
@@ -1023,8 +1079,12 @@ nfct_parse_conntrack_attr_cb(const struct nlattr *attr, void *data)
|
||||||
|
/* NXP ASK: Comcerto fast path and QoS */
|
||||||
|
case CTA_LAYERSCAPE_FP_ORIG:
|
||||||
|
case CTA_LAYERSCAPE_FP_REPLY:
|
||||||
|
- if (mnl_attr_validate(attr, MNL_TYPE_NESTED) < 0)
|
||||||
|
+ if (mnl_attr_validate(attr, MNL_TYPE_NESTED) < 0) {
|
||||||
|
+ ask_nfct_dbg("top fp attr nested validation failed raw_type=0x%x type=%u len=%u payload_len=%u\n",
|
||||||
|
+ attr->nla_type, type, attr->nla_len,
|
||||||
|
+ mnl_attr_get_payload_len(attr));
|
||||||
|
return MNL_CB_OK;
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
case CTA_QOSCONNMARK:
|
||||||
|
if (mnl_attr_validate(attr, MNL_TYPE_U64) < 0)
|
||||||
|
@@ -1168,12 +1228,22 @@ nfct_payload_parse(const void *payload, size_t payload_len,
|
||||||
|
* Do not abort the entire conntrack dump if one fast-path
|
||||||
|
* extension block cannot be represented by this userspace.
|
||||||
|
*/
|
||||||
|
+ ask_nfct_dbg("payload parse: saw CTA_LAYERSCAPE_FP_ORIG raw_type=0x%x type=%u len=%u payload_len=%u\n",
|
||||||
|
+ tb[CTA_LAYERSCAPE_FP_ORIG]->nla_type,
|
||||||
|
+ mnl_attr_get_type(tb[CTA_LAYERSCAPE_FP_ORIG]),
|
||||||
|
+ tb[CTA_LAYERSCAPE_FP_ORIG]->nla_len,
|
||||||
|
+ mnl_attr_get_payload_len(tb[CTA_LAYERSCAPE_FP_ORIG]));
|
||||||
|
nfct_parse_comcerto_fp(tb[CTA_LAYERSCAPE_FP_ORIG], ct,
|
||||||
|
__DIR_ORIG);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tb[CTA_LAYERSCAPE_FP_REPLY]) {
|
||||||
|
/* See CTA_LAYERSCAPE_FP_ORIG handling above. */
|
||||||
|
+ ask_nfct_dbg("payload parse: saw CTA_LAYERSCAPE_FP_REPLY raw_type=0x%x type=%u len=%u payload_len=%u\n",
|
||||||
|
+ tb[CTA_LAYERSCAPE_FP_REPLY]->nla_type,
|
||||||
|
+ mnl_attr_get_type(tb[CTA_LAYERSCAPE_FP_REPLY]),
|
||||||
|
+ tb[CTA_LAYERSCAPE_FP_REPLY]->nla_len,
|
||||||
|
+ mnl_attr_get_payload_len(tb[CTA_LAYERSCAPE_FP_REPLY]));
|
||||||
|
nfct_parse_comcerto_fp(tb[CTA_LAYERSCAPE_FP_REPLY], ct,
|
||||||
|
__DIR_REPL);
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
diff --git a/include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h b/include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h
|
||||||
|
index 418870a..510b5a8 100644
|
||||||
|
--- a/include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h
|
||||||
|
+++ b/include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h
|
||||||
|
@@ -60,6 +60,7 @@ enum ctattr_type {
|
||||||
|
CTA_SYNPROXY,
|
||||||
|
CTA_FILTER,
|
||||||
|
CTA_STATUS_MASK,
|
||||||
|
+ CTA_TIMESTAMP_EVENT,
|
||||||
|
/* NXP ASK: Layerscape fast path attributes - order must match kernel! */
|
||||||
|
CTA_LAYERSCAPE_FP_ORIG,
|
||||||
|
CTA_LAYERSCAPE_FP_REPLY,
|
||||||
13
scripts/check-ctenum/kernel_ctenum.c
Normal file
13
scripts/check-ctenum/kernel_ctenum.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <linux/netfilter/nfnetlink_conntrack.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
printf("CTA_TIMESTAMP_EVENT=%d\n", CTA_TIMESTAMP_EVENT);
|
||||||
|
printf("CTA_LAYERSCAPE_FP_ORIG=%d\n", CTA_LAYERSCAPE_FP_ORIG);
|
||||||
|
printf("CTA_LAYERSCAPE_FP_REPLY=%d\n", CTA_LAYERSCAPE_FP_REPLY);
|
||||||
|
printf("CTA_QOSCONNMARK=%d\n", CTA_QOSCONNMARK);
|
||||||
|
printf("CTA_QOSCONNMARK_PAD=%d\n", CTA_QOSCONNMARK_PAD);
|
||||||
|
printf("CTA_MAX=%d\n", CTA_MAX);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
13
scripts/check-ctenum/libnfct_ctenum.c
Normal file
13
scripts/check-ctenum/libnfct_ctenum.c
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include "include/libnetfilter_conntrack/linux_nfnetlink_conntrack.h"
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
printf("CTA_TIMESTAMP_EVENT=%d\n", CTA_TIMESTAMP_EVENT);
|
||||||
|
printf("CTA_LAYERSCAPE_FP_ORIG=%d\n", CTA_LAYERSCAPE_FP_ORIG);
|
||||||
|
printf("CTA_LAYERSCAPE_FP_REPLY=%d\n", CTA_LAYERSCAPE_FP_REPLY);
|
||||||
|
printf("CTA_QOSCONNMARK=%d\n", CTA_QOSCONNMARK);
|
||||||
|
printf("CTA_QOSCONNMARK_PAD=%d\n", CTA_QOSCONNMARK_PAD);
|
||||||
|
printf("CTA_MAX=%d\n", CTA_MAX);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user