2 # Copyright (C) 2013 Julius Schulz-Zander <julius@net.t-labs.tu-berlin.de>
3 # Copyright (C) 2014-2017 OpenWrt.org
4 # Copyright (C) 2018-2020 Yousong Zhou <yszhou4tech@gmail.com>
6 # This is free software, licensed under the GNU General Public License v2.
7 # See /LICENSE for more information.
9 include $(TOPDIR
)/rules.mk
10 include $(INCLUDE_DIR
)/kernel.mk
11 include .
/openvswitch.mk
13 # Checklist on version bump
15 # - Check acinclude.m4 for range of supported kernel versions: "but version newer than .* is not supported"
16 # - Check and update kmod dependencies when necessary (runtime module load check in the least)
19 PKG_VERSION
:=$(ovs_version
)
21 PKG_SOURCE
:=$(PKG_NAME
)-$(PKG_VERSION
).
tar.gz
22 PKG_SOURCE_URL
:=https
://www.openvswitch.org
/releases
/
23 PKG_HASH
:=4171e52a8c0ffe160c1daa6687219d902a2a6969b296d223d8dac980ab99a260
25 PKG_LICENSE
:=Apache-2.0
26 PKG_LICENSE_FILES
:=LICENSE
27 PKG_CPE_ID
:=cpe
:/a
:openvswitch
:openvswitch
29 PKG_BUILD_DIR
:=$(ovs_builddir
)
30 PKG_BUILD_DEPENDS
+=python3
/host python-six
/host
37 PKG_MAINTAINER
:=Yousong Zhou
<yszhou4tech@gmail.com
>
39 include $(INCLUDE_DIR
)/package.mk
40 include ..
/..
/lang
/python
/python3-host.mk
41 include ..
/..
/lang
/python
/python3-package.mk
45 ovs_kmod_intree_kernel_patchver_min
:=3.10
46 ovs_kmod_intree_kernel_patchver_max
:=5.5
47 ovs_kmod_intree_not_supported
:=$(strip $(call kernel_patchver_lt
,$(ovs_kmod_intree_kernel_patchver_min
))$(call kernel_patchver_gt
,$(ovs_kmod_intree_kernel_patchver_max
)))
48 ovs_kmod_intree_dir
:=$(PKG_BUILD_DIR
)/datapath
/linux
49 ovs_kmod_upstream_dir
:=$(LINUX_DIR
)/net
/openvswitch
50 ovs_kmod_package_name
=$(if
$(filter openvswitch
,$(1)),openvswitch
,$(1))
51 ovs_kmod_is_intree
=$(filter %-intree
,$(1))
52 ovs_kmod_upstream_name
=kmod-
$(call ovs_kmod_package_name
,$(patsubst %-intree
,%,$(1)))
53 ovs_kmod_package_provides
=$(call ovs_kmod_upstream_name
,$(1))
54 define OvsKmodPackageTemplate
55 ifeq ($(if
$(call ovs_kmod_is_intree
,$(1)),$(ovs_kmod_intree_not_supported
)),)
56 define KernelPackage
/$(call ovs_kmod_package_name
,$(1))
58 CATEGORY
:=Kernel modules
59 SUBMENU
:=Network Support
60 TITLE
:=$(ovs_kmod_
$(1)_title
)
61 DEPENDS
:=$(ovs_kmod_
$(1)_depends
) $(if
$(call ovs_kmod_is_intree
,$(1)),@IPV6 @DEVEL
)
62 PROVIDES
:=$(call ovs_kmod_package_provides
,$(1))
63 KCONFIG
:=$(ovs_kmod_
$(1)_kconfig
)
64 FILES
:=$(ovs_kmod_
$(1)_files
)
65 AUTOLOAD
:=$(call AutoProbe
,$(foreach m
,$(ovs_kmod_
$(1)_files
),$(notdir $(patsubst %.ko
,%,$(basename $(m
))))))
68 ovs_kmod_packages
+=$(call ovs_kmod_package_name
,$(1))
72 ovs_kmod_openvswitch_title
:=Open vSwitch kernel datapath
(upstream
)
73 ovs_kmod_openvswitch_kconfig
:=CONFIG_OPENVSWITCH
74 ovs_kmod_openvswitch_depends
:=\
79 +IPV6
:kmod-nf-conntrack6 \
81 +kmod-ipt-conntrack-extra \
83 ovs_kmod_openvswitch_files
:=$(ovs_kmod_upstream_dir
)/openvswitch.ko
84 $(eval
$(call OvsKmodPackageTemplate
,openvswitch
))
86 ovs_kmod_openvswitch-gre_title
:=Open vSwitch GRE tunneling support
(upstream
)
87 ovs_kmod_openvswitch-gre_kconfig
:= CONFIG_OPENVSWITCH_GRE
88 ovs_kmod_openvswitch-gre_depends
:= +kmod-openvswitch
+kmod-gre
89 ovs_kmod_openvswitch-gre_files
:= $(ovs_kmod_upstream_dir
)/vport-gre.ko
90 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-gre
))
92 ovs_kmod_openvswitch-vxlan_title
:=Open vSwitch VXLAN tunneling support
(upstream
)
93 ovs_kmod_openvswitch-vxlan_kconfig
:= CONFIG_OPENVSWITCH_VXLAN
94 ovs_kmod_openvswitch-vxlan_depends
:= +kmod-openvswitch
+kmod-vxlan
95 ovs_kmod_openvswitch-vxlan_files
:= $(ovs_kmod_upstream_dir
)/vport-vxlan.ko
96 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-vxlan
))
98 ovs_kmod_openvswitch-geneve_title
:=Open vSwitch Geneve tunneling support
(upstream
)
99 ovs_kmod_openvswitch-geneve_kconfig
:= CONFIG_OPENVSWITCH_GENEVE
100 ovs_kmod_openvswitch-geneve_depends
:= +kmod-openvswitch
+kmod-geneve
101 ovs_kmod_openvswitch-geneve_files
:= $(ovs_kmod_upstream_dir
)/vport-geneve.ko
102 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-geneve
))
106 # - kmod-ipt-conntrack-extra: required for nf_conncount.ko
108 ovs_kmod_openvswitch-intree_title
:=Open vSwitch kernel datapath
(in tree
)
109 ovs_kmod_openvswitch-intree_depends
:=\
115 +kmod-ipt-conntrack-extra \
117 ovs_kmod_openvswitch-intree_files
:= $(ovs_kmod_intree_dir
)/openvswitch.ko
118 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-intree
))
120 ovs_kmod_openvswitch-gre-intree_title
:=Open vSwitch GRE tunneling support
(in tree
)
121 ovs_kmod_openvswitch-gre-intree_depends
:= +kmod-openvswitch-intree
+kmod-gre
122 ovs_kmod_openvswitch-gre-intree_files
:= $(ovs_kmod_intree_dir
)/vport-gre.ko
123 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-gre-intree
))
125 ovs_kmod_openvswitch-vxlan-intree_title
:=Open vSwitch VXLAN tunneling support
(in tree
)
126 ovs_kmod_openvswitch-vxlan-intree_depends
:= +kmod-openvswitch-intree
+kmod-vxlan
127 ovs_kmod_openvswitch-vxlan-intree_files
:= $(ovs_kmod_intree_dir
)/vport-vxlan.ko
128 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-vxlan-intree
))
130 ovs_kmod_openvswitch-geneve-intree_title
:=Open vSwitch Geneve tunneling support
(in tree
)
131 ovs_kmod_openvswitch-geneve-intree_depends
:= +kmod-openvswitch-intree
+kmod-geneve
132 ovs_kmod_openvswitch-geneve-intree_files
:= $(ovs_kmod_intree_dir
)/vport-geneve.ko
133 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-geneve-intree
))
135 ovs_kmod_openvswitch-stt-intree_title
:=Open vSwitch STT tunneling support
(in tree
)
136 ovs_kmod_openvswitch-stt-intree_depends
:= +kmod-openvswitch-intree
137 ovs_kmod_openvswitch-stt-intree_files
:= $(ovs_kmod_intree_dir
)/vport-stt.ko
138 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-stt-intree
))
140 ovs_kmod_openvswitch-lisp-intree_title
:=Open vSwitch LISP tunneling support
(in tree
)
141 ovs_kmod_openvswitch-lisp-intree_depends
:= +kmod-openvswitch-intree
142 ovs_kmod_openvswitch-lisp-intree_files
:= $(ovs_kmod_intree_dir
)/vport-lisp.ko
143 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-lisp-intree
))
147 # for f in sbin/*; do echo $f; readelf -d $f | grep -i shared; done
148 # for f in bin/*; do echo $f; readelf -d $f | grep -i shared; done
149 # for f in lib/*.so; do echo $f; readelf -d $f | grep -i shared; done
151 ovs_libopenvswitch_title
:=Open vSwitch
(libopenvswitch.so
)
152 ovs_libopenvswitch_hidden
:=1
153 ovs_libopenvswitch_depends
:=+libopenssl
+libunbound
+!(arc||arceb
):libunwind
154 ovs_libopenvswitch_depends
+=+libatomic
155 ovs_libopenvswitch_files
:=usr
/lib
/libopenvswitch
*.so
*
156 $(eval
$(call OvsPackageTemplate
,libopenvswitch
))
159 ovs_libofproto_title
:=Open vSwitch
(libofproto.so libsflow.so
)
160 ovs_libofproto_hidden
:=1
161 ovs_libofproto_depends
+=+libatomic
162 ovs_libofproto_files
:=usr
/lib
/libofproto
*.so
* usr
/lib
/libsflow
*.so
*
163 $(eval
$(call OvsPackageTemplate
,libofproto
))
166 ovs_libovsdb_title
:=Open vSwitch
(libovsdb.so
)
167 ovs_libovsdb_hidden
:=1
168 ovs_libovsdb_depends
+=+libatomic
169 ovs_libovsdb_files
:=usr
/lib
/libovsdb
*.so
*
170 $(eval
$(call OvsPackageTemplate
,libovsdb
))
173 ovs_vswitchd_title
:=Open vSwitch
(ovs-vswitchd
)
174 ovs_vswitchd_hidden
:=1
175 ovs_vswitchd_depends
:=+openvswitch-libopenvswitch
+openvswitch-libofproto
176 ovs_vswitchd_depends
+=+libatomic
177 ovs_vswitchd_files
:=usr
/sbin
/ovs-vswitchd
178 $(eval
$(call OvsPackageTemplate
,vswitchd
))
181 ovs_ovsdb_title
:=Open vSwitch
(ovsdb-server
)
183 ovs_ovsdb_depends
:=+openvswitch-libopenvswitch
+openvswitch-libovsdb
184 ovs_ovsdb_depends
+=+libatomic
185 ovs_ovsdb_files
:=usr
/sbin
/ovsdb-server
186 $(eval
$(call OvsPackageTemplate
,ovsdb
))
189 ovs_common_title
:=Open vSwitch
(common files
)
191 ovs_common_depends
:=+openvswitch-libopenvswitch
+openvswitch-libofproto
+openvswitch-libovsdb
192 ovs_common_depends
+=+libatomic
194 usr
/share
/openvswitch
/scripts
/ovs-lib \
195 usr
/share
/openvswitch
/scripts
/ovs-ctl \
196 usr
/share
/openvswitch
/scripts
/ovs-kmod-ctl \
197 usr
/share
/openvswitch
/scripts
/ovs-save \
198 $(foreach b
,ovs-appctl ovs-dpctl ovs-ofctl ovs-vsctl ovsdb-client ovsdb-tool
,usr
/bin
/$(b
))
199 define ovs_common_install
200 $$(INSTALL_DIR
) $$(1)/etc
/openvswitch
201 $$(INSTALL_DIR
) $$(1)/etc
/init.d
202 $$(INSTALL_BIN
) .
/files
/openvswitch.init
$$(1)/etc
/init.d
/openvswitch
203 $$(INSTALL_DIR
) $$(1)/etc
/config
204 $$(INSTALL_DATA
) .
/files
/openvswitch.config
$$(1)/etc
/config
/openvswitch
205 $$(INSTALL_DIR
) $$(1)/usr
/share
/openvswitch
/scripts
206 $$(INSTALL_BIN
) .
/files
/ovs-ctl-wrapper
$$(1)/usr
/share
/openvswitch
/scripts
/
207 $$(LN
) /usr
/share
/openvswitch
/scripts
/ovs-ctl-wrapper
$$(1)/usr
/bin
/ovs-ctl
208 $$(LN
) /usr
/share
/openvswitch
/scripts
/ovs-ctl-wrapper
$$(1)/usr
/bin
/ovs-kmod-ctl
210 define Package
/openvswitch-common
/conffiles
211 /etc
/config
/openvswitch
214 $(eval
$(call OvsPackageTemplate
,common
))
217 # coreutils-sleep is required by ovs-lib for sleeping a fraction of second
219 # uuidgen is required for generating system-id
220 ovs_openvswitch_title
:=Open vSwitch
221 ovs_openvswitch_hidden
:=
222 ovs_openvswitch_depends
:=+coreutils
+coreutils-sleep
+uuidgen \
223 +openvswitch-common
+openvswitch-vswitchd
+openvswitch-ovsdb
+kmod-openvswitch
224 ovs_openvswitch_depends
+=+libatomic
225 ovs_openvswitch_files
:= usr
/share
/openvswitch
/vswitch.ovsschema
226 $(eval
$(call OvsPackageTemplate
,openvswitch
))
229 ovs_python3_title
:=Open vSwitch
(Python3 library
)
231 ovs_python3_depends
:=+PACKAGE_openvswitch-python3
:python3
+PACKAGE_openvswitch-python3
:python3-six
232 define ovs_python3_install
233 $$(INSTALL_DIR
) $$(1)$$(PYTHON3_PKG_DIR
)
234 $$(CP
) $$(PKG_INSTALL_DIR
)/usr
/share
/openvswitch
/python
/ovs
$$(1)$$(PYTHON3_PKG_DIR
)
236 $(eval
$(call OvsPackageTemplate
,python3
))
243 --disable-silent-rules \
247 ovs_cv_python3
=$(PYTHON3
) \
248 ovs_cv_python3_host
=$(HOST_PYTHON3_BIN
) \
250 KARCH
=$(LINUX_KARCH
) \
252 ovs_intree_kmod_configs
:=CONFIG_PACKAGE_kmod-openvswitch-intree
253 ovs_intree_kmod_enabled
:=$(strip $(foreach c
,$(ovs_intree_kmod_configs
),$($(c
))))
254 PKG_CONFIG_DEPENDS
+=$(ovs_intree_kmod_configs
)
255 ifneq ($(ovs_intree_kmod_enabled
),)
256 ifeq ($(ovs_kmod_intree_not_supported
),)
257 CONFIGURE_ARGS
+= --with-linux
=$(LINUX_DIR
)
259 $(warning XXX
: openvswitch
: intree kmods selected but not supported
)
263 TARGET_CFLAGS
+= -flto
-std
=gnu99
264 MAKE_VARS
+= PYTHONPATH
="$(HOST_PYTHON3PATH)"
266 export OVS_KERNEL_MAKE_FLAGS
=$(KERNEL_MAKE_FLAGS
)
268 override CONFIG_AUTOREMOVE
=
270 $(foreach p
,$(ovs_kmod_packages
),\
271 $(eval
$(call KernelPackage
,$(p
)))\
273 $(foreach p
,$(ovs_packages
),\
274 $(eval
$(call BuildPackage
,$(p
)))\