🦄 refactor: DPISDN-61:refactor the way of building container and helmchart package for dp-trace-telemetry,packet-io-engine,trex,log-collector and nic-uio-binder.

This commit is contained in:
linxin
2024-10-18 17:20:32 +08:00
committed by fumingwei
parent 456dd51649
commit 5d0e7529a4
72 changed files with 2722 additions and 15 deletions

View File

@@ -0,0 +1,20 @@
{% import 'dockerfile-macros.j2' as macros -%}
ARG BASE_IMAGE
FROM ${BASE_IMAGE}
RUN {{ macros.install_packages(packages) }} && \
{{ macros.clean_after_install_packages() }} && \
sed -Ei -c "s|/opt/mrzcpd|/opt/tsg/mrzcpd|g" /etc/profile.d/mrzcpd.sh && \
sed -Ei -c "s|/opt/mrzcpd|/opt/tsg/mrzcpd|g" /opt/tsg/mrzcpd/lib/pkgconfig/mrzcpd.pc
# files
COPY files/mrzcpd.conf /etc/ld.so.conf.d/
COPY files/mrzcpd /etc/sysconfig/
# templates
COPY templates/* /templates/
# scripts
COPY --chmod=755 entrypoint.sh /usr/local/bin/
WORKDIR /opt/tsg/mrzcpd/
CMD ["/bin/bash"]

View File

@@ -0,0 +1,3 @@
rule_target := packet-io-engine
rule_prerequisites := $(DEP_ENV_FILES) $(YUM_REPO_FILE) $(DOCKERFILE_MACROS) $(BUILD_DIR)/base/$(BUILD_DONE_FILE)
rule_recipes := $(call build_image_from_dockerfile,$(rule_target),$(IMAGE_REGISTRY)/base:$(IMAGE_TAG),$(IMAGE_REGISTRY)/$(rule_target):$(IMAGE_TAG))

View File

@@ -0,0 +1,20 @@
#!/bin/sh -ex
source /usr/local/bin/entrypoint_public.sh
# start
parse_args "$@"
render_template mrglobal.conf.j2 /opt/tsg/mrzcpd/etc/mrglobal.conf
if [ ${IS_ENABLE_PRESTART} == "true" ]; then
enable_prestart
fi
if [ ${IS_ENABLE_INTERACTIVE_STARTUP} == "true" ]; then
enable_interactive_startup
fi
exec /opt/tsg/mrzcpd/bin/mrzcpd -c /opt/tsg/mrzcpd/etc/mrglobal.conf -s /opt/tsg/mrzcpd/etc/mrglobal.dynamic.conf

View File

@@ -0,0 +1,3 @@
MRZCPD_ROOT=/opt/tsg/mrzcpd
HUGEPAGE_NUM_1G=32
DEFAULT_UIO_MODULE="vfio_pci"

View File

@@ -0,0 +1,2 @@
# Marsio ZeroCopy Driver Library Path
/opt/tsg/mrzcpd/lib

View File

@@ -0,0 +1,19 @@
packages:
- name: mlnx-ofed-user-space-only-all
version: 5.17.15-1.el8.x86_64.noarch
install_command: dnf
- name: mrzcpd-icelake-server
version: 4.8.21.2d714a5
download_command: dnf
install_command: rpm
install_command_options: "--prefix /opt/tsg/mrzcpd"
- name: mrzcpd-znver1
version: 4.8.21.2d714a5
download_command: dnf
install_command: rpm
install_command_options: "--prefix /opt/tsg/mrzcpd"
- name: mrzcpd-corei7
version: 4.8.21.2d714a5
download_command: dnf
install_command: rpm
install_command_options: "--prefix /opt/tsg/mrzcpd"

View File

@@ -0,0 +1,473 @@
{%- set nf_nic_list = [] -%}
{%- set mirr_nic_list = [] -%}
{%- set ep_nic_l2_list = [] -%}
{%- set ep_nic_l3_list = [] -%}
{%- set sid_step = 4 -%}
{%- set cycle = mrzcpd.nf_count -%}
{%- set enter = "\n" -%}
{%- for index in range(cycle) %}
{{- nf_nic_list.append( 'nf_'+loop.index0|string+'_fw') or "" }}
{{- nf_nic_list.append( 'nf_'+loop.index0|string+'_proxy') or "" }}
{{- nf_nic_list.append( 'nf_'+loop.index0|string+'_sce') or "" }}
{{- nf_nic_list.append( 'nf_'+loop.index0|string+'_shaping_engine') or "" }}
{{- ep_nic_l2_list.append( 'ep_'+loop.index0|string+'_sce_l2') or "" }}
{{- ep_nic_l3_list.append( 'ep_'+loop.index0|string+'_sce_l3') or "" }}
{{- mirr_nic_list.append( 'mirr_'+loop.index0|string+'_fw') or "" }}
{{- mirr_nic_list.append( 'mirr_'+loop.index0|string+'_proxy') or "" }}
{%- endfor -%}
[device]
device=
{%- if mrzcpd.interfaces -%}
{%- for interface in mrzcpd.interfaces -%}{{ interface.name }}{%- if not loop.last %},{% endif %}{%- endfor -%},
{%- endif -%}
{%- if mrzcpd.virtual_interfaces -%}
{%- if mrzcpd.interfaces %},{%- endif -%}
{%- for interface in mrzcpd.virtual_interfaces -%}{{ interface.name }}{%- if not loop.last %},{% endif %}{%- endfor -%},
{%- endif -%}
{{nf_nic_list|join(',')}},{{ep_nic_l2_list|join(',')}},{{ep_nic_l3_list|join(',')}},{{mirr_nic_list|join(',')}},nf_inject,virtio_dign_c,virtio_dign_s
sz_tunnel={{ mrzcpd.pktmbuf_queue_size }}
sz_buffer=0
# Configuration settings for the physical device (Phy dev).
{%- for interface in mrzcpd.interfaces %}
[device:{{ interface.name }}]
{%- if interface.address is defined %}
in_addr={{ interface.address }}
in_mask={{ interface.mask | default('') }}
{%- if interface.gateway is defined %}
gateway={{ interface.gateway }}
{%- endif %}
{%- endif %}
nr_rxdesc=8192
nr_txdesc=8192
allmulticast=1
rssmode=3
promisc={{ interface.promisc | default(0) }}
mtu={{ interface.mtu | default(1500) }}
{%- if interface.role == "5" %}
driver=1
{%- else %}
driver=0
{%- endif %}
role={{ interface.role | default('') }}
{%- if interface.type is defined %}
type={{ interface.type }}
{%- endif %}
{%- if interface.vlan is defined %}
{%- if interface.vlan|length > 0 %}
allow_vlan_ids={%- for vlan in interface.vlan -%}
{%- if not loop.first %}, {% endif -%}{{ vlan.vlan_id }}
{%- endfor %}
{%- endif %}
{%- endif %}
{%- if interface.en_representor is defined %}
en_representor={{ interface.en_representor }}
{%- endif %}
{%- if interface.representor_ns is defined %}
representor_ns={{ interface.representor_ns }}
{%- endif %}
{%- if interface.representor_dev is defined %}
representor_dev={{ interface.representor_dev }}
{%- endif %}
{%- if interface.rxcore is defined %}
rx_cores={{ interface.rxcore }}
{%- endif %}
{% endfor %}
# Configuration settings for network bonding (bond) functionality.
{%- for interface in mrzcpd.virtual_interfaces %}
{%- if interface.type == "1" %}
[device:{{ interface.name }}]
{%- if interface.address %}
in_addr={{ interface.address }}
in_mask={{ interface.mask }}
{%- if interface.gateway %}
gateway={{ interface.gateway }}
{%- endif %}
{%- endif %}
rssmode=3
{%- if interface.promisc %}
promisc={{ interface.promisc }}
{%- endif %}
{%- if interface.mtu %}
mtu={{ interface.mtu }}
{%- endif %}
{%- if interface.role == "5" %}
driver=1
{%- else %}
driver=0
{%- endif %}
role={{ interface.role }}
{%- if interface.type %}
type={{ interface.type }}
{%- endif %}
{%- if interface.bond_mode %}
bond_mode={{ interface.bond_mode }}
{%- endif %}
{%- if interface.bond_xmit_policy %}
bond_xmit_policy={{ interface.bond_xmit_policy }}
{%- endif %}
{%- if interface.slaves %}
bond_slaves={%- for slave in interface.slaves %}{%- if not loop.first %},{%- endif %}{{ slave.interface }}{%- endfor %}
{%- endif %}
{%- if interface.rxcore %}
rx_cores={{ interface.rxcore }}
{%- endif %}
{%- endif %}
{% endfor %}
# Configuration settings for the virtual device (virtual dev) management.
[device:virtio_dign_c]
driver=1
role=1
[device:virtio_dign_s]
driver=1
role=1
# Configuration settings for the representational (represent) device.
{%- for interface in mrzcpd.virtual_interfaces %}
{%- if interface.en_representor == "1" %}
[device:{{ interface.name }}]
{%- if interface.promisc %}
promisc={{ interface.promisc }}
{%- endif %}
{%- if interface.mtu %}
mtu={{ interface.mtu }}
{%- endif %}
{%- if interface.role == "5" %}
driver=1
{%- else %}
driver=0
{%- endif %}
role={{ interface.role }}
{%- if interface.vlan and interface.vlan | length > 0 %}
allow_vlan_ids={%- for vlan in interface.vlan %}{%- if not loop.first %},{%- endif %}{{ vlan.vlan_id }}{%- endfor %}
{%- endif %}
en_representor={{ interface.en_representor }}
{%- if interface.representor_ns %}
representor_ns={{ interface.representor_ns }}
{%- endif %}
{%- if interface.rxcore %}
rx_cores={{ interface.rxcore }}
{%- endif %}
{%- endif %}
{% endfor %}
# Configuration settings for the VLAN (Virtual Local Area Network) sub-interface.
{%- for interface in mrzcpd.interfaces %}
{%- if interface.vlan is defined %}
{%- for vlan in interface.vlan %}
{%- if vlan.ipv4_address is defined or vlan.ipv6_address is defined %}
[device:{{ interface.name }}:vlan:{{ vlan.vlan_id }}]
{%- if vlan.ipv4_address is defined %}
in_addr_v4={{ vlan.ipv4_address }}
{%- endif %}
{%- if vlan.ipv4_mask is defined %}
in_mask_v4={{ vlan.ipv4_mask }}
{%- endif %}
{%- if vlan.ipv6_address is defined %}
in_addr_v6={{ vlan.ipv6_address }}
{%- endif %}
{%- if vlan.ipv6_mask is defined %}
in_mask_v6={{ vlan.ipv6_mask }}
{%- endif %}
{%- endif %}
{% endfor %}
{%- endif %}
{%- endfor %}
{%- for interface in mrzcpd.virtual_interfaces %}
{%- if interface.vlan is defined %}
{%- for vlan in interface.vlan %}
{%- if vlan.ipv4_address is defined or vlan.ipv6_address is defined %}
[device:{{ interface.name }}:vlan:{{ vlan.vlan_id }}]
{%- if vlan.ipv4_address is defined %}
in_addr_v4={{ vlan.ipv4_address }}
{%- endif %}
{%- if vlan.ipv4_mask is defined %}
in_mask_v4={{ vlan.ipv4_mask }}
{%- endif %}
{%- if vlan.ipv6_address is defined %}
in_addr_v6={{ vlan.ipv6_address }}
{%- endif %}
{%- if vlan.ipv6_mask is defined %}
in_mask_v6={{ vlan.ipv6_mask }}
{%- endif %}
{%- endif %}
{% endfor %}
{%- endif %}
{% endfor %}
# Configuration settings for the shmdey device.
[device:nf_inject]
driver=3
role=4
{% for index in range(cycle) %}
[device:nf_{{ index }}_fw]
driver=3
role=4
[device:nf_{{ index }}_sce]
driver=3
role=4
[device:ep_{{ index }}_sce_l2]
driver=3
role=4
[device:ep_{{ index }}_sce_l3]
en_representor=1
representor_ns=1
driver=3
role=4
[device:nf_{{ index }}_shaping_engine]
driver=3
role=4
[device:nf_{{ index }}_proxy]
driver=3
role=4
[device:mirr_{{ index }}_fw]
driver=3
role=4
[device:mirr_{{ index }}_proxy]
driver=3
role=4
{% endfor %}
# This module handles the global configuration settings.
[service]
iocore={{ mrzcpd.cpu_affinity | join (',') }}
distmode={{ mrzcpd.distmode }}
hashmode=0
poll_wait_throttle={{ mrzcpd.enable_poll_wait_throttle | default(0) }}
poll_wait_enable=1
[eal]
virtaddr=0x500000000000
loglevel=7
huge-dir=/run/mrzcpd/hugepages
legacy_mem=0
[keepalive]
check_spinlock=1
[ctrlzone]
ctrlzone0=tunnat,64
[pool]
create_mode={{ mrzcpd.pktmbuf_pool_create_mode }}
sz_direct_pktmbuf={{ mrzcpd.pktmbuf_pool_max_elements_count | int }}
sz_indirect_pktmbuf={{ mrzcpd.indirect_pktmbuf | default(0) }}
sz_cache=512
sz_data={{ mrzcpd.pktmbuf_max_size | default(0) }}
[buffer_leak_detect]
check_buffer_leak={{ mrzcpd.enable_check_pktmbuf_leak | default(0) }}
[ctrlmsg]
listen_addr=0.0.0.0
listen_port=46789
[rpc]
addr=127.0.0.1
port=56789
[limits]
nr_max_ef_adapters={{ mrzcpd.nr_max_ef_adapters | default(0) }}
nr_max_vwires={{ mrzcpd.nr_max_vwires | default(0) }}
nr_max_tera_adapters={{ mrzcpd.nr_max_tera_adapters | default(0) }}
nr_max_link_dbs={{ mrzcpd.nr_max_link_dbs | default(0) }}
# This module is used to configure the access mode settings.
[ef_adapters]
sid_start=100
sid_end=200
{%- for service in mrzcpd.services %}
{%- if service.type == "etherfabric_adapter" %}
[ef_adapter:{{ loop.index0 }}]
ef_adapter_id={{ service.id }}
{%- if service.mode == "virtual-wire" %}
mode=1
{%- elif service.mode == "tap" %}
mode=2
{%- endif %}
listen_device={{ service.listen_on_device | default('') }}
{%- endif %}
{% endfor %}
# The configuration sets the access mode to vwire mode.
[vwires]
sid_start=300
sid_end=400
[vwire:0]
vwire_id=0
interface_int=virtio_dign_c
interface_ext=virtio_dign_s
{% for virtual_wire in mrzcpd.virtual_wires %}
[vwire:{{ loop.index0 + 1 }}]
vwire_id={{ virtual_wire.id }}
interface_int={{ virtual_wire.internal_interface }}
interface_ext={{ virtual_wire.external_interface }}
{%- if virtual_wire.obp_device is defined %}
obp_device={{ virtual_wire.obp_device }}
{%- endif %}
{%- if virtual_wire.obp_segment is defined %}
obp_segment={{ virtual_wire.obp_segment }}
{%- endif %}
{% endfor %}
# The configuration sets the access mode to tera adapter mode.
[tera_adapters]
sid_start=500
sid_end=600
{%- for service in mrzcpd.services %}
{%- if service.type == "tera_adapter" %}
[tera_adapter:{{ loop.index0 }}]
tera_adapter_id={{ service.id }}
listen_device={{ service.listen_on_device | default('') }}
vlan_int={{ service.vlan_int | default('') }}
vlan_ext={{ service.vlan_ext | default('') }}
mac_flipping={{ service.mac_flipping | default(0) }}
{%- endif %}
{% endfor %}
# This module is used to configure health check settings.
{%- for index in range(cycle) %}
[health_check:{{ index * sid_step }}]
name=nf{{ index }}_fw_health_check
device=nf_{{ index }}_fw
method=0
multiplier=20
interval=10
[health_check:{{ index * sid_step + 1 }}]
name=nf{{ index }}_proxy_health_check
device=nf_{{ index }}_proxy
method=0
multiplier=20
interval=10
[health_check:{{ index * sid_step + 2 }}]
name=nf{{ index }}_sce_health_check
device=nf_{{ index }}_sce
method=0
multiplier=20
interval=10
[health_check:{{ index * sid_step + 3 }}]
name=nf{{ index }}_shaping_engine_health_check
device=nf_{{ index }}_shaping_engine
method=0
multiplier=20
interval=10
{% endfor %}
[health_check:{{ cycle * sid_step }}]
name=nf_inject_health_check
device=nf_inject
method=0
multiplier=20
interval=10
# This module is used for configuring the service load balancing settings.
[service_lb]
sid_start={{ mrzcpd.service_lb.sid_range_start }}
sid_end={{ mrzcpd.service_lb.sid_range_end }}
{%- for index in range(cycle) %}
{%- set load_balance_index = index * sid_step %}
[load_balance:{{ load_balance_index }}]
sid={{ mrzcpd.service_lb.sid_range_start + load_balance_index }}
mode=0
devices=nf_{{ index }}_fw,0
health_check_sessions=nf{{ index }}_fw_health_check
[load_balance:{{ load_balance_index + 1 }}]
sid={{ mrzcpd.service_lb.sid_range_start + load_balance_index + 1 }}
mode=0
devices=nf_{{ index }}_proxy,0
health_check_sessions=nf{{ index }}_proxy_health_check
[load_balance:{{ load_balance_index + 2 }}]
sid={{ mrzcpd.service_lb.sid_range_start + load_balance_index + 2 }}
mode=0
devices=nf_{{ index }}_sce,0
health_check_sessions=nf{{ index }}_sce_health_check
[load_balance:{{ load_balance_index + 3 }}]
sid={{ mrzcpd.service_lb.sid_range_start + load_balance_index + 3 }}
mode=0
devices=nf_{{ index }}_shaping_engine,0
health_check_sessions=nf{{ index }}_shaping_engine_health_check
{% endfor %}
[load_balance:{{ cycle * sid_step }}]
sid={{ mrzcpd.service_lb.sid_range_start + cycle * sid_step }}
mode=0
devices=nf_inject,0
health_check_sessions=nf_inject_health_check
# This module is responsible for configuring the link database (linkdb) settings.
{%- for linkdb in mrzcpd.linkdb %}
[link_db:{{ linkdb.id }}]
type={{ linkdb.type }}
traffic_link_id={{ linkdb.traffic_link_id }}
{%- if linkdb.vwire_id is defined %}
vwire_id={{ linkdb.vwire_id }}
{%- endif %}
{%- if linkdb.ef_ip_addr is defined and linkdb.ef_link_id is defined %}
ef_ip_addr={{ linkdb.ef_ip_addr }}
ef_link_id={{ linkdb.ef_link_id }}
{%- endif %}
{% endfor %}
# This module is used for configuring the network bridge settings.
[bridge:0]
{%- if mrzcpd.service_chaining.vxlan_interface is defined %}
master_device={{ mrzcpd.service_chaining.vxlan_interface }}
devices={{ mrzcpd.service_chaining.vxlan_interface }},{{ ep_nic_l3_list |join(',')}}
{%- else %}
devices={{ ep_nic_l3_list |join(',')}}
{%- endif %}
[bridge:1]
{%- if mrzcpd.traffic_mirror.interface is defined %}
master_device={{ mrzcpd.traffic_mirror.interface }}
devices={{ mrzcpd.traffic_mirror.interface }},{{ mirr_nic_list |join(',')}}
{%- else %}
devices={{ mirr_nic_list |join(',')}}
{%- endif %}
[bridge:2]
{%- if mrzcpd.service_chaining.vlan_interface is defined %}
master_device={{ mrzcpd.service_chaining.vlan_interface }}
devices={{ mrzcpd.service_chaining.vlan_interface }},{{ ep_nic_l2_list |join(',')}}
{%- else %}
devices={{ ep_nic_l2_list |join(',')}}
{%- endif %}
# This module is responsible for configuring the static classifier rules.
{%- for index in range(cycle) %}
[classifier_rule:{{ index }}]
rule_id={{ index + 1 }}
dst_ip_addr_v4=192.0.2.{{ index + 101 }}
dst_ip_mask_v4=32
action=2
priority=0
sid={{ index * sid_step + 1000 }}
vwire_id=0
{% endfor %}
{%- for index in range(cycle) %}
[classifier_rule:{{ index + cycle }}]
rule_id={{ index + cycle + 1 }}
src_ip_addr_v4=192.0.2.{{ index + 101 }}
src_ip_mask_v4=32
action=2
priority=0
sid={{ index * sid_step + 1000 }}
vwire_id=0
{% endfor %}

View File

@@ -0,0 +1,98 @@
{%- for obp in obp_devices -%}
[olp_device:{{loop.index0}}]
name = {{ obp.name }}
type = {{ obp.type }}
connect = {{ obp.connect }}
in_addr = {{ obp.address }}
port = {{ obp.port }}
{% for seg in obp.segment %}
[{{obp.name}}:{{seg.id}}]
state = {{ seg.workline}}
heartbeat = {{ seg.heartbeat_mode }}
heartbeat_send_interval_in_ms= {{ seg.hb_send_interval_in_ms }}
heartbeat_timeout_interval_in_ms= {{ seg.hb_timeout_interval_in_ms}}
heartbeat_lost_threshold = {{ seg.hb_lost_threshold }}
nonrevertive_mode = {{ seg.nonrevertive_mode }}
{% endfor %}
{%- endfor %}
{% for rule in ruleset %}
[classifier_rule:{{ loop.index0 }}]
{%- if rule.RuleId is defined %}
rule_id={{ rule.RuleId }}
{%- endif %}
ruleset_type=0
{%- if rule.SrcIpV4 is defined %}
src_ip_addr_v4={{ rule.SrcIpV4 }}
{%- if rule.SrcIpMask is defined %}
src_ip_mask_v4={{ rule.SrcIpMask }}
{%- endif -%}
{%- endif -%}
{%- if rule.DstIpV4 is defined %}
dst_ip_addr_v4={{ rule.DstIpV4 }}
{%- if rule.DstIpMask is defined %}
dst_ip_mask_v4={{ rule.DstIpMask }}
{%- endif -%}
{%- endif -%}
{%- if rule.SrcIpV6 is defined %}
src_ip_addr_v6={{ rule.SrcIpV6 }}
{%- if rule.SrcIpMask is defined %}
src_ip_mask_v6={{ rule.SrcIpMask }}
{%- endif -%}
{%- endif -%}
{%- if rule.DstIpV6 is defined %}
dst_ip_addr_v6={{ rule.DstIpV6 }}
{%- if rule.DstIpMask is defined %}
dst_ip_mask_v6={{ rule.DstIpMask }}
{%- endif -%}
{%- endif -%}
{%- if rule.SrcPortLow is defined %}
src_port_start={{ rule.SrcPortLow }}
{%- endif -%}
{%- if rule.SrcPortHigh is defined %}
src_port_end={{ rule.SrcPortHigh}}
{%- endif -%}
{%- if rule.DstPortLow is defined %}
dst_port_start={{ rule.DstPortLow }}
{%- endif -%}
{%- if rule.DstPortHigh is defined %}
dst_port_end={{ rule.DstPortHigh }}
{%- endif -%}
{%- if rule.Proto is defined %}
proto={{ rule.Proto }}
{%- endif -%}
{%- if rule.Priority is defined %}
priority={{ rule.Priority }}
{%- endif -%}
{%- if rule.Sid is defined %}
sid={{ rule.Sid }}
{%- endif -%}
{%- if rule.VwireId is defined %}
vwire_id={{ rule.VwireId }}
{%- endif -%}
{%- if rule.EfId is defined %}
ef_adapter_id={{rule.EfId}}
{%- endif -%}
{%- if rule.TeraId is defined %}
tera_adapter_id={{ rule.TeraId }}
{%- endif %}
action=2
{% endfor %}
[dp_trace_rule]