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
)
20 PKG_RELEASE
:=$(AUTORELEASE
)
21 PKG_SOURCE
:=$(PKG_NAME
)-$(PKG_VERSION
).
tar.gz
22 PKG_SOURCE_URL
:=https
://www.openvswitch.org
/releases
/
23 PKG_HASH
:=7d5797f2bf2449c6a266149e88f72123540f7fe7f31ad52902057ae8d8f88c38
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
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
43 define Package
/openvswitch
/config
44 source
"$(SOURCE)/Config.in"
48 ovs_kmod_intree_kernel_patchver_min
:=3.10
49 ovs_kmod_intree_kernel_patchver_max
:=5.5
50 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
)))
51 ovs_kmod_intree_dir
:=$(PKG_BUILD_DIR
)/datapath
/linux
52 ovs_kmod_upstream_dir
:=$(LINUX_DIR
)/net
/openvswitch
53 ovs_kmod_package_name
=$(if
$(filter openvswitch
,$(1)),openvswitch
,$(1))
54 ovs_kmod_is_intree
=$(filter %-intree
,$(1))
55 ovs_kmod_upstream_name
=kmod-
$(call ovs_kmod_package_name
,$(patsubst %-intree
,%,$(1)))
56 ovs_kmod_package_provides
=$(call ovs_kmod_upstream_name
,$(1))
57 define OvsKmodPackageTemplate
58 ifeq ($(if
$(call ovs_kmod_is_intree
,$(1)),$(ovs_kmod_intree_not_supported
)),)
59 define KernelPackage
/$(call ovs_kmod_package_name
,$(1))
61 CATEGORY
:=Kernel modules
62 SUBMENU
:=Network Support
63 TITLE
:=$(ovs_kmod_
$(1)_title
)
64 DEPENDS
:=$(ovs_kmod_
$(1)_depends
) $(if
$(call ovs_kmod_is_intree
,$(1)),@IPV6 @DEVEL
)
65 PROVIDES
:=$(call ovs_kmod_package_provides
,$(1))
66 KCONFIG
:=$(ovs_kmod_
$(1)_kconfig
)
67 FILES
:=$(ovs_kmod_
$(1)_files
)
68 AUTOLOAD
:=$(call AutoProbe
,$(foreach m
,$(ovs_kmod_
$(1)_files
),$(notdir $(patsubst %.ko
,%,$(basename $(m
))))))
71 ovs_kmod_packages
+=$(call ovs_kmod_package_name
,$(1))
75 ovs_kmod_openvswitch_title
:=Open vSwitch kernel datapath
(upstream
)
76 ovs_kmod_openvswitch_kconfig
:=CONFIG_OPENVSWITCH
77 ovs_kmod_openvswitch_depends
:=\
83 +IPV6
:kmod-nf-conntrack6 \
85 +kmod-ipt-conntrack-extra \
87 ovs_kmod_openvswitch_files
:=$(ovs_kmod_upstream_dir
)/openvswitch.ko
88 $(eval
$(call OvsKmodPackageTemplate
,openvswitch
))
90 ovs_kmod_openvswitch-gre_title
:=Open vSwitch GRE tunneling support
(upstream
)
91 ovs_kmod_openvswitch-gre_kconfig
:= CONFIG_OPENVSWITCH_GRE
92 ovs_kmod_openvswitch-gre_depends
:= +kmod-openvswitch
+kmod-gre
93 ovs_kmod_openvswitch-gre_files
:= $(ovs_kmod_upstream_dir
)/vport-gre.ko
94 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-gre
))
96 ovs_kmod_openvswitch-vxlan_title
:=Open vSwitch VXLAN tunneling support
(upstream
)
97 ovs_kmod_openvswitch-vxlan_kconfig
:= CONFIG_OPENVSWITCH_VXLAN
98 ovs_kmod_openvswitch-vxlan_depends
:= +kmod-openvswitch
+kmod-vxlan
99 ovs_kmod_openvswitch-vxlan_files
:= $(ovs_kmod_upstream_dir
)/vport-vxlan.ko
100 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-vxlan
))
102 ovs_kmod_openvswitch-geneve_title
:=Open vSwitch Geneve tunneling support
(upstream
)
103 ovs_kmod_openvswitch-geneve_kconfig
:= CONFIG_OPENVSWITCH_GENEVE
104 ovs_kmod_openvswitch-geneve_depends
:= +kmod-openvswitch
+kmod-geneve
105 ovs_kmod_openvswitch-geneve_files
:= $(ovs_kmod_upstream_dir
)/vport-geneve.ko
106 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-geneve
))
110 # - kmod-ipt-conntrack-extra: required for nf_conncount.ko
112 ovs_kmod_openvswitch-intree_title
:=Open vSwitch kernel datapath
(in tree
)
113 ovs_kmod_openvswitch-intree_depends
:=\
119 +kmod-ipt-conntrack-extra \
121 ovs_kmod_openvswitch-intree_files
:= $(ovs_kmod_intree_dir
)/openvswitch.ko
122 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-intree
))
124 ovs_kmod_openvswitch-gre-intree_title
:=Open vSwitch GRE tunneling support
(in tree
)
125 ovs_kmod_openvswitch-gre-intree_depends
:= +kmod-openvswitch-intree
+kmod-gre
126 ovs_kmod_openvswitch-gre-intree_files
:= $(ovs_kmod_intree_dir
)/vport-gre.ko
127 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-gre-intree
))
129 ovs_kmod_openvswitch-vxlan-intree_title
:=Open vSwitch VXLAN tunneling support
(in tree
)
130 ovs_kmod_openvswitch-vxlan-intree_depends
:= +kmod-openvswitch-intree
+kmod-vxlan
131 ovs_kmod_openvswitch-vxlan-intree_files
:= $(ovs_kmod_intree_dir
)/vport-vxlan.ko
132 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-vxlan-intree
))
134 ovs_kmod_openvswitch-geneve-intree_title
:=Open vSwitch Geneve tunneling support
(in tree
)
135 ovs_kmod_openvswitch-geneve-intree_depends
:= +kmod-openvswitch-intree
+kmod-geneve
136 ovs_kmod_openvswitch-geneve-intree_files
:= $(ovs_kmod_intree_dir
)/vport-geneve.ko
137 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-geneve-intree
))
139 ovs_kmod_openvswitch-stt-intree_title
:=Open vSwitch STT tunneling support
(in tree
)
140 ovs_kmod_openvswitch-stt-intree_depends
:= +kmod-openvswitch-intree
141 ovs_kmod_openvswitch-stt-intree_files
:= $(ovs_kmod_intree_dir
)/vport-stt.ko
142 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-stt-intree
))
144 ovs_kmod_openvswitch-lisp-intree_title
:=Open vSwitch LISP tunneling support
(in tree
)
145 ovs_kmod_openvswitch-lisp-intree_depends
:= +kmod-openvswitch-intree
146 ovs_kmod_openvswitch-lisp-intree_files
:= $(ovs_kmod_intree_dir
)/vport-lisp.ko
147 $(eval
$(call OvsKmodPackageTemplate
,openvswitch-lisp-intree
))
151 # for f in sbin/*; do echo $f; readelf -d $f | grep -i shared; done
152 # for f in bin/*; do echo $f; readelf -d $f | grep -i shared; done
153 # for f in lib/*.so; do echo $f; readelf -d $f | grep -i shared; done
155 ovs_libopenvswitch_title
:=Open vSwitch
(libopenvswitch.so
)
156 ovs_libopenvswitch_hidden
:=1
157 ovs_libopenvswitch_depends
:= \
158 +libatomic
+libopenssl
+OPENVSWITCH_WITH_LIBUNBOUND
:libunbound \
159 +!(arc||arceb
):libunwind
160 ovs_libopenvswitch_files
:=usr
/lib
/libopenvswitch
*.so
*
161 $(eval
$(call OvsPackageTemplate
,libopenvswitch
))
164 ovs_libofproto_title
:=Open vSwitch
(libofproto.so libsflow.so
)
165 ovs_libofproto_hidden
:=1
166 ovs_libofproto_depends
:= +libatomic
167 ovs_libofproto_files
:=usr
/lib
/libofproto
*.so
* usr
/lib
/libsflow
*.so
*
168 $(eval
$(call OvsPackageTemplate
,libofproto
))
171 ovs_libovsdb_title
:=Open vSwitch
(libovsdb.so
)
172 ovs_libovsdb_hidden
:=1
173 ovs_libovsdb_depends
:= +libatomic
174 ovs_libovsdb_files
:=usr
/lib
/libovsdb
*.so
*
175 $(eval
$(call OvsPackageTemplate
,libovsdb
))
178 ovs_vswitchd_title
:=Open vSwitch
(ovs-vswitchd
)
179 ovs_vswitchd_hidden
:=1
180 ovs_vswitchd_depends
:= \
181 +libatomic
+openvswitch-libofproto
+openvswitch-libopenvswitch
182 ovs_vswitchd_files
:=usr
/sbin
/ovs-vswitchd
183 $(eval
$(call OvsPackageTemplate
,vswitchd
))
186 ovs_ovsdb_title
:=Open vSwitch
(ovsdb-server
)
188 ovs_ovsdb_depends
:= \
189 +libatomic
+openvswitch-libopenvswitch
+openvswitch-libovsdb
190 ovs_ovsdb_files
:=usr
/sbin
/ovsdb-server
191 $(eval
$(call OvsPackageTemplate
,ovsdb
))
194 ovs_common_title
:=Open vSwitch
(common files
)
196 ovs_common_depends
:= \
197 +libatomic
+openvswitch-libofproto
+openvswitch-libopenvswitch \
198 +openvswitch-libovsdb
200 usr
/share
/openvswitch
/scripts
/ovs-lib \
201 usr
/share
/openvswitch
/scripts
/ovs-ctl \
202 usr
/share
/openvswitch
/scripts
/ovs-kmod-ctl \
203 usr
/share
/openvswitch
/scripts
/ovs-save \
204 $(foreach b
,ovs-appctl ovs-dpctl ovs-ofctl ovs-vsctl ovsdb-client ovsdb-tool
,usr
/bin
/$(b
))
205 define ovs_common_install
206 $$(INSTALL_DIR
) $$(1)/etc
/openvswitch
207 $$(INSTALL_DIR
) $$(1)/etc
/init.d
208 $$(INSTALL_BIN
) .
/files
/openvswitch.init
$$(1)/etc
/init.d
/openvswitch
209 $$(INSTALL_DIR
) $$(1)/etc
/config
210 $$(INSTALL_DATA
) .
/files
/openvswitch.config
$$(1)/etc
/config
/openvswitch
211 $$(INSTALL_DIR
) $$(1)/usr
/share
/openvswitch
/scripts
212 $$(INSTALL_BIN
) .
/files
/ovs-ctl-wrapper
$$(1)/usr
/share
/openvswitch
/scripts
/
213 $$(LN
) /usr
/share
/openvswitch
/scripts
/ovs-ctl-wrapper
$$(1)/usr
/bin
/ovs-ctl
214 $$(LN
) /usr
/share
/openvswitch
/scripts
/ovs-ctl-wrapper
$$(1)/usr
/bin
/ovs-kmod-ctl
216 define Package
/openvswitch-common
/conffiles
217 /etc
/config
/openvswitch
220 $(eval
$(call OvsPackageTemplate
,common
))
223 # coreutils-sleep is required by ovs-lib for sleeping a fraction of second
225 # uuidgen is required for generating system-id
226 ovs_openvswitch_title
:=Open vSwitch
227 ovs_openvswitch_hidden
:=
228 ovs_openvswitch_depends
:= \
229 +coreutils
+coreutils-sleep
+kmod-openvswitch
+libatomic
+openvswitch-common \
230 +openvswitch-ovsdb
+openvswitch-vswitchd
+uuidgen
231 ovs_openvswitch_files
:= usr
/share
/openvswitch
/vswitch.ovsschema
232 $(eval
$(call OvsPackageTemplate
,openvswitch
))
235 ovs_python3_title
:=Open vSwitch
(Python3 library
)
237 ovs_python3_depends
:=+PACKAGE_openvswitch-python3
:python3
238 define ovs_python3_install
239 $$(INSTALL_DIR
) $$(1)$$(PYTHON3_PKG_DIR
)
240 $$(CP
) $$(PKG_INSTALL_DIR
)/usr
/share
/openvswitch
/python
/ovs
$$(1)$$(PYTHON3_PKG_DIR
)
242 $(eval
$(call OvsPackageTemplate
,python3
))
249 --disable-silent-rules \
252 $(if
$(CONFIG_OPENVSWITCH_WITH_LIBUNBOUND
),,ac_cv_lib_unbound_ub_ctx_create
=no
) \
254 ovs_cv_python3
=$(PYTHON3
) \
255 ovs_cv_python3_host
=$(HOST_PYTHON3_BIN
) \
257 KARCH
=$(LINUX_KARCH
) \
259 ovs_intree_kmod_configs
:=CONFIG_PACKAGE_kmod-openvswitch-intree
260 ovs_intree_kmod_enabled
:=$(strip $(foreach c
,$(ovs_intree_kmod_configs
),$($(c
))))
261 PKG_CONFIG_DEPENDS
+=$(ovs_intree_kmod_configs
)
262 ifneq ($(ovs_intree_kmod_enabled
),)
263 ifeq ($(ovs_kmod_intree_not_supported
),)
264 CONFIGURE_ARGS
+= --with-linux
=$(LINUX_DIR
)
266 $(warning XXX
: openvswitch
: intree kmods selected but not supported
)
270 TARGET_CFLAGS
+= -flto
-std
=gnu99
271 MAKE_VARS
+= PYTHONPATH
="$(HOST_PYTHON3PATH)"
273 export OVS_KERNEL_MAKE_FLAGS
=$(KERNEL_MAKE_FLAGS
)
275 override CONFIG_AUTOREMOVE
=
277 $(foreach p
,$(ovs_kmod_packages
),\
278 $(eval
$(call KernelPackage
,$(p
)))\
280 $(foreach p
,$(ovs_packages
),\
281 $(eval
$(call BuildPackage
,$(p
)))\