Merge pull request #11353 from kvuorine/fwknop-fixes
[feed/packages.git] / net / openvswitch / Makefile
1 #
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>
5 #
6 # This is free software, licensed under the GNU General Public License v2.
7 # See /LICENSE for more information.
8 #
9 include $(TOPDIR)/rules.mk
10 include $(INCLUDE_DIR)/kernel.mk
11 include ./openvswitch.mk
12
13 # Checklist on version bump
14 #
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)
17 #
18 PKG_NAME:=openvswitch
19 PKG_VERSION:=$(ovs_version)
20 PKG_RELEASE:=2
21 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
22 PKG_SOURCE_URL:=https://www.openvswitch.org/releases/
23 PKG_HASH:=4171e52a8c0ffe160c1daa6687219d902a2a6969b296d223d8dac980ab99a260
24
25 PKG_LICENSE:=Apache-2.0
26 PKG_LICENSE_FILES:=LICENSE
27 PKG_CPE_ID:=cpe:/a:openvswitch:openvswitch
28
29 PKG_BUILD_DIR:=$(ovs_builddir)
30 PKG_BUILD_DEPENDS+=python3/host python-six/host
31 PKG_USE_MIPS16:=0
32 PKG_BUILD_PARALLEL:=1
33 PKG_FIXUP:=autoreconf
34 PKG_INSTALL:=1
35 PYTHON3_PKG_BUILD:=0
36
37 PKG_MAINTAINER:=Yousong Zhou <yszhou4tech@gmail.com>
38
39 include $(INCLUDE_DIR)/package.mk
40 include ../../lang/python/python3-host.mk
41 include ../../lang/python/python3-package.mk
42
43
44 ovs_kmod_packages:=
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))
57 SECTION:=kernel
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))))))
66 endef
67
68 ovs_kmod_packages+=$(call ovs_kmod_package_name,$(1))
69 endif
70 endef
71
72 ovs_kmod_openvswitch_title:=Open vSwitch kernel datapath (upstream)
73 ovs_kmod_openvswitch_kconfig:=CONFIG_OPENVSWITCH
74 ovs_kmod_openvswitch_depends:=\
75 +kmod-lib-crc32c \
76 +kmod-nf-nat \
77 +IPV6:kmod-nf-nat6 \
78 +kmod-nf-conntrack \
79 +IPV6:kmod-nf-conntrack6 \
80 +kmod-nsh \
81 +kmod-ipt-conntrack-extra \
82
83 ovs_kmod_openvswitch_files:=$(ovs_kmod_upstream_dir)/openvswitch.ko
84 $(eval $(call OvsKmodPackageTemplate,openvswitch))
85
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))
91
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))
97
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))
103
104 # NOTE depends
105 #
106 # - kmod-ipt-conntrack-extra: required for nf_conncount.ko
107 #
108 ovs_kmod_openvswitch-intree_title:=Open vSwitch kernel datapath (in tree)
109 ovs_kmod_openvswitch-intree_depends:=\
110 +kmod-lib-crc32c \
111 +kmod-nf-nat \
112 +IPV6:kmod-nf-nat6 \
113 +kmod-nf-conntrack \
114 +kmod-udptunnel4 \
115 +kmod-ipt-conntrack-extra \
116
117 ovs_kmod_openvswitch-intree_files:= $(ovs_kmod_intree_dir)/openvswitch.ko
118 $(eval $(call OvsKmodPackageTemplate,openvswitch-intree))
119
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))
124
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))
129
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))
134
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))
139
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))
144
145 # Dependency review
146 #
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
150 #
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))
157
158
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))
164
165
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))
171
172
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))
179
180
181 ovs_ovsdb_title:=Open vSwitch (ovsdb-server)
182 ovs_ovsdb_hidden:=1
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))
187
188
189 ovs_common_title:=Open vSwitch (common files)
190 ovs_common_hidden:=1
191 ovs_common_depends:=+openvswitch-libopenvswitch +openvswitch-libofproto +openvswitch-libovsdb
192 ovs_common_depends+=+libatomic
193 ovs_common_files:= \
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
209 endef
210 define Package/openvswitch-common/conffiles
211 /etc/config/openvswitch
212 /etc/openvswitch
213 endef
214 $(eval $(call OvsPackageTemplate,common))
215
216
217 # coreutils-sleep is required by ovs-lib for sleeping a fraction of second
218 #
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))
227
228
229 ovs_python3_title:=Open vSwitch (Python3 library)
230 ovs_python3_hidden:=
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)
235 endef
236 $(eval $(call OvsPackageTemplate,python3))
237
238
239 CONFIGURE_ARGS+= \
240 --enable-ndebug \
241 --enable-shared \
242 --disable-libcapng \
243 --disable-silent-rules \
244
245 CONFIGURE_VARS += \
246 ovs_cv_flake8=no \
247 ovs_cv_python3=$(PYTHON3) \
248 ovs_cv_python3_host=$(HOST_PYTHON3_BIN) \
249 SPHINXBUILD=none \
250 KARCH=$(LINUX_KARCH) \
251
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)
258 else
259 $(warning XXX: openvswitch: intree kmods selected but not supported)
260 endif
261 endif
262
263 TARGET_CFLAGS += -flto -std=gnu99
264 MAKE_VARS += PYTHONPATH="$(HOST_PYTHON3PATH)"
265
266 export OVS_KERNEL_MAKE_FLAGS=$(KERNEL_MAKE_FLAGS)
267
268 override CONFIG_AUTOREMOVE=
269
270 $(foreach p,$(ovs_kmod_packages),\
271 $(eval $(call KernelPackage,$(p)))\
272 )
273 $(foreach p,$(ovs_packages),\
274 $(eval $(call BuildPackage,$(p)))\
275 )