blob: 3dbd2e5a5c62d46763f491ff98a4d53f693a099b [file] [log] [blame]
Hyunsun Moon06f98552019-08-15 13:44:47 -06001{{/*
2Copyright 2018-present Open Networking Foundation
3Copyright 2018 Intel Corporation
4
5Licensed under the Apache License, Version 2.0 (the "License");
6you may not use this file except in compliance with the License.
7You may obtain a copy of the License at
8
9http://www.apache.org/licenses/LICENSE-2.0
10
11Unless required by applicable law or agreed to in writing, software
12distributed under the License is distributed on an "AS IS" BASIS,
13WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14See the License for the specific language governing permissions and
15limitations under the License.
16*/}}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -070017---
18apiVersion: v1
19kind: ServiceAccount
20metadata:
Hyunsun Moon06f98552019-08-15 13:44:47 -060021 name: spgwc
22 labels:
23{{ tuple "spgwc" . | include "mcord-services.metadata_labels" | indent 4 }}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -070024---
25kind: Role
26apiVersion: rbac.authorization.k8s.io/v1
27metadata:
Hyunsun Moon06f98552019-08-15 13:44:47 -060028 name: spgwc
29 labels:
30{{ tuple "spgwc" . | include "mcord-services.metadata_labels" | indent 4 }}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -070031rules:
32- apiGroups: [""]
33 resources: ["pods"]
34 verbs: ["get"]
35---
36kind: RoleBinding
37apiVersion: rbac.authorization.k8s.io/v1
38metadata:
Hyunsun Moon06f98552019-08-15 13:44:47 -060039 name: spgwc
40 labels:
41{{ tuple "spgwc" . | include "mcord-services.metadata_labels" | indent 4 }}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -070042roleRef:
43 apiGroup: rbac.authorization.k8s.io
44 kind: Role
Hyunsun Moon06f98552019-08-15 13:44:47 -060045 name: spgwc
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -070046subjects:
47- kind: ServiceAccount
Hyunsun Moon06f98552019-08-15 13:44:47 -060048 name: spgwc
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -070049---
50apiVersion: v1
51kind: ConfigMap
52metadata:
Hyunsun Moon06f98552019-08-15 13:44:47 -060053 name: spgwc
54 labels:
55{{ tuple "spgwc" . | include "mcord-services.metadata_labels" | indent 4 }}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -070056data:
57 launch.sh: |
58 #!/bin/bash -xe
59
60 RUN_DIR=${RUN_DIR:-"/opt/cp"}
61 mkdir -p $RUN_DIR/config
62 cd $RUN_DIR/config
63 cp /etc/cp/config/{adc_rules.cfg,cp_config.cfg,interface.cfg,meter_profile.cfg,pcc_rules.cfg,sdf_rules.cfg} .
64 sed -i "s/CP_ADDR/$CP_ADDR/g" interface.cfg
65 sed -i "s/DP_ADDR/$DP_ADDR/g" interface.cfg
66 . cp_config.cfg
67 ngic_controlplane $EAL_ARGS -- $APP_ARGS
68 cp_config.cfg: |
69 if [ ! -d "/dev/hugepages" ]; then
70 MEMORY="--no-huge -m $((MEM_LIMIT-1024))"
71 fi
72 SHARED_DIR="/opt/cp/config/shared"
73 if [ -d ${SHARED_DIR} ]; then
74 while [ ! -f ${SHARED_DIR}/SGW_S1U_IP ]; do echo "Waiting for SGW_S1U_IP"; sleep 2; done
75 SGW_S1U_IP=$(cat ${SHARED_DIR}/SGW_S1U_IP)
76 fi
Hyunsun Moone5c66fe2019-08-02 13:11:46 -060077 until dig +short ${MME_S11_IP} | grep -v -e '^$' > /dev/null; do
78 echo "Waiting for MME";
79 sleep 5;
80 done
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -070081
82 MGMT_INFO="-s ${CP_ADDR} -m ${MME_S11_IP} -w ${SGW_S1U_IP}"
83 APN_INFO="-i ${IP_POOL_IP} -p ${IP_POOL_MASK} -a ${APN}"
84 SPGW_CFG="-d 03 -l 2 -r 7.7.7.7 -g 6.6.6.6 -v 4.4.4.4 -u 5.5.5.5"
85 APP_ARGS="${MGMT_INFO} ${APN_INFO} ${SPGW_CFG} ${TEID_INFO}"
86
87 CORES="-c $(taskset -p $$ | awk '{print $NF}')"
88 DEVICES="--no-pci"
89 EAL_ARGS="${CORES} ${MEMORY} ${DEVICES}"
90 interface.cfg: |
91 [0]
92 dp_comm_ip = DP_ADDR
93 dp_comm_port = 20
94 cp_comm_ip = CP_ADDR
95 cp_comm_port = 21
96 adc_rules.cfg: |
97 [GLOBAL]
98 NUM_ADC_RULES = 5
99
100 ;FORMAT ::
101 ;ADC_TYPE : [ DOMAIN = 0 | IP = 1 | IP PREFIX =2 ]
102 ;
103 ;if ADC_TYPE = 0
104 ; DOMAIN
105 ;elseif ADC_TYPE = 1
106 ; IP
107 ;elseif ADC_TYPE = 2
108 ; IP
109 ; PREFIX
110 ;else
111 ; NONE
112 ;
113 ;NOTE :
114 ;Rules defined first have a higher priority, unless DROP is specified
115 ;(i.e. multiple rules for the same IP).
116 ;When specifying DROP with an IP address, use a prefix of 32 to prevent DNS
117 ;results from overwriting rule.
118
119
120 [ADC_RULE_1]
121 ADC_TYPE = 1
122 IP = 13.1.1.111
123
124 [ADC_RULE_2]
125 ADC_TYPE = 2
126 IP = 13.1.1.0
127 PREFIX = 24
128
129 [ADC_RULE_3]
130 ADC_TYPE = 1
131 IP = 13.1.1.112
132 PREFIX = 24
133
134 [ADC_RULE_4]
135 ADC_TYPE = 0
136 DOMAIN = www.example.gov
137
138 [ADC_RULE_5]
139 ADC_TYPE = 0
140 DOMAIN = www.drop_example.com
141 meter_profile.cfg: |
142 [GLOBAL]
143 NUM_OF_IDX = 7
144
145 [ENTRY_1]
146 ;Committed Information Rate (CIR). Measured in bytes per second.
147 ;MBR is mapped into CIR, convert MBR from bits to Bytes and set CIR.
148 CIR = 2342400
149 ;Committed Burst Size unit = Bytes
150 CBS = 5856
151 ;Excess Burst Size unit = Bytes
152 EBS = 11712
153 ;Meter profile index. Refer this index in static_pcc.cfg to set AMBR/MBR
154 MTR_PROFILE_IDX = 3
155
156 [ENTRY_2]
157 ;1200 = 1756800
158 ;1400 = 2049600
159 ;1600 = 2342400
160 CIR = 2342400
161 CBS = 5856
162 EBS = 11712
163 MTR_PROFILE_IDX = 4
164
165 [ENTRY_3]
166 ; QCI5,QCI7 15.571kbps = 1947 B
167 CIR = 2342400
168 CBS = 5856
169 EBS = 11712
170 MTR_PROFILE_IDX = 5
171
172 [ENTRY_4]
173 ; QCI1, 44kbps = 5500 B
174 CIR = 2342400
175 CBS = 5856
176 EBS = 11712
177 MTR_PROFILE_IDX = 6
178
179 [ENTRY_5]
180 ; QCI9, 31.143kbps = 3893 B
181 CIR = 2342400
182 CBS = 5856
183 EBS = 11712
184 MTR_PROFILE_IDX = 7
185
186 [ENTRY_6]
187 ; 128B, 7pps
188 CIR = 2342400
189 CBS = 512
190 EBS = 1024
191 MTR_PROFILE_IDX = 8
192
193 [ENTRY_7]
194 ; 128B, 2pps
195 CIR = 2342400
196 CBS = 512
197 EBS = 1024
198 MTR_PROFILE_IDX = 9
199
200 pcc_rules.cfg: |
201 [GLOBAL]
202 NUM_PCC_FILTERS = 9
203 ;To config AMBR/MBR values refer meter_profile.cfg. specify only the
204 ;meter profile index to be set here.
205 UL_AMBR_MTR_PROFILE_IDX = 3
206 DL_AMBR_MTR_PROFILE_IDX = 4
207
208 ;default filter - must be first for now (until DP doesn't install any filters)
209 ;associated with default adc rule
210 [PCC_FILTER_1]
211 RULE_NAME = DefaultRule
212 RATING_GROUP = 9
213 SERVICE_ID = 0
214 RULE_STATUS = 0
215 GATE_STATUS = 1
216 SESSION_CONT = 0
217 REPORT_LEVEL = 1
218 CHARGING_MODE = 0
219 METERING_METHOD = 0
220 MUTE_NOTIFY = 0
221 MONITORING_KEY = 0
222 SPONSOR_ID = 0
223 REDIRECT_INFO = 0
224 PRECEDENCE = 254
225 DROP_PKT_COUNT = 0
226 ;Specify the meter profile index from meter_profile.cfg
227 UL_MBR_MTR_PROFILE_IDX = 7
228 DL_MBR_MTR_PROFILE_IDX = 7
229 ;List of ADC filter indices
230 SDF_FILTER_IDX = 99998
231
232 [PCC_FILTER_2]
233 RULE_NAME = sdf_rule_1
234 RATING_GROUP = 5
235 SERVICE_ID = 0
236 RULE_STATUS = 0
237 GATE_STATUS = 1
238 SESSION_CONT = 0
239 REPORT_LEVEL = 2
240 CHARGING_MODE = 0
241 METERING_METHOD = 0
242 MUTE_NOTIFY = 0
243 MONITORING_KEY = 0
244 SPONSOR_ID = 0
245 REDIRECT_INFO = 0
246 PRECEDENCE = 1
247 DROP_PKT_COUNT = 0
248 UL_MBR_MTR_PROFILE_IDX = 5
249 DL_MBR_MTR_PROFILE_IDX = 5
250 ;List of SDF filter indices
251 SDF_FILTER_IDX = 1
252
253 [PCC_FILTER_3]
254 RULE_NAME = sdf_rule_2
255 RATING_GROUP = 1
256 SERVICE_ID = 0
257 RULE_STATUS = 0
258 GATE_STATUS = 1
259 SESSION_CONT = 0
260 REPORT_LEVEL = 3
261 CHARGING_MODE = 0
262 METERING_METHOD = 0
263 MUTE_NOTIFY = 0
264 MONITORING_KEY = 0
265 SPONSOR_ID = 0
266 REDIRECT_INFO = 0
267 PRECEDENCE = 18
268 DROP_PKT_COUNT = 0
269 UL_MBR_MTR_PROFILE_IDX = 6
270 DL_MBR_MTR_PROFILE_IDX = 6
271 ;List of SDF filter indices
272 SDF_FILTER_IDX = 2
273
274 [PCC_FILTER_4]
275 RULE_NAME = adc_rule_1
276 RATING_GROUP = Zero-Rate
277 SERVICE_ID = Internet
278 RULE_STATUS = 0
279 GATE_STATUS = 1
280 SESSION_CONT = 0
281 REPORT_LEVEL = 8
282 CHARGING_MODE = 0
283 METERING_METHOD = 0
284 MUTE_NOTIFY = 0
285 MONITORING_KEY = 0
286 REDIRECT_INFO = 0
287 SPONSOR_ID = Example
288 PRECEDENCE = 15
289 DROP_PKT_COUNT = 0
290 UL_MBR_MTR_PROFILE_IDX = 7
291 DL_MBR_MTR_PROFILE_IDX = 7
292 ;List of SDF filter indices
293 ADC_FILTER_IDX = 1
294
295 [PCC_FILTER_5]
296 RULE_NAME = adc_rule_2
297 RATING_GROUP = 0
298 SERVICE_ID = CIPA
299 RULE_STATUS = 0
300 GATE_STATUS = 1
301 SESSION_CONT = 0
302 REPORT_LEVEL = 9
303 CHARGING_MODE = 0
304 METERING_METHOD = 0
305 MUTE_NOTIFY = 0
306 MONITORING_KEY = 0
307 SPONSOR_ID = Example
308 REDIRECT_INFO = 0
309 SPONSOR_ID = Example
310 REDIRECT_INFO = 0
311 PRECEDENCE = 4
312 DROP_PKT_COUNT = 0
313 UL_MBR_MTR_PROFILE_IDX = 0
314 DL_MBR_MTR_PROFILE_IDX = 0
315 ;List of SDF filter indices
316 ADC_FILTER_IDX = 2
317
318 [PCC_FILTER_6]
319 RULE_NAME = sdf_rule_3
320 RATING_GROUP = 7
321 SERVICE_ID = 0
322 RULE_STATUS = 0
323 GATE_STATUS = 1
324 SESSION_CONT = 0
325 REPORT_LEVEL = 4
326 CHARGING_MODE = 0
327 METERING_METHOD = 0
328 MUTE_NOTIFY = 0
329 MONITORING_KEY = 0
330 SPONSOR_ID = 0
331 REDIRECT_INFO = 0
332 PRECEDENCE = 17
333 DROP_PKT_COUNT = 0
334 UL_MBR_MTR_PROFILE_IDX = 5
335 DL_MBR_MTR_PROFILE_IDX = 5
336 ;List of SDF filter indices
337 SDF_FILTER_IDX = 3
338
339 [PCC_FILTER_7]
340 RULE_NAME = adc_rule_3
341 RATING_GROUP = Zero-Rate
342 SERVICE_ID = Internet
343 RULE_STATUS = 0
344 GATE_STATUS = 1
345 SESSION_CONT = 0
346 REPORT_LEVEL = 5
347 CHARGING_MODE = 0
348 METERING_METHOD = 0
349 MUTE_NOTIFY = 0
350 MONITORING_KEY = 0
351 SPONSOR_ID = Example
352 REDIRECT_INFO = 0
353 PRECEDENCE = 210
354 DROP_PKT_COUNT = 0
355 UL_MBR_MTR_PROFILE_IDX = 7
356 DL_MBR_MTR_PROFILE_IDX = 7
357 ;List of SDF filter indices
358 ADC_FILTER_IDX = 4
359
360 [PCC_FILTER_8]
361 RULE_NAME = adc_rule_4
362 RATING_GROUP = Zero-Rate
363 SERVICE_ID = Management
364 RULE_STATUS = 0
365 GATE_STATUS = 1
366 SESSION_CONT = 0
367 REPORT_LEVEL = 6
368 CHARGING_MODE = 0
369 METERING_METHOD = 0
370 MUTE_NOTIFY = 0
371 MONITORING_KEY = 0
372 SPONSOR_ID = Example
373 REDIRECT_INFO = 0
374 PRECEDENCE = 200
375 DROP_PKT_COUNT = 0
376 UL_MBR_MTR_PROFILE_IDX = 7
377 DL_MBR_MTR_PROFILE_IDX = 7
378 ;List of SDF filter indices
379 ADC_FILTER_IDX = 12
380
381 [PCC_FILTER_9]
382 RULE_NAME = adc_rule_5
383 RATING_GROUP = Zero-Rate
384 SERVICE_ID = Provisioning
385 RULE_STATUS = 0
386 GATE_STATUS = 1
387 SESSION_CONT = 0
388 REPORT_LEVEL = 7
389 CHARGING_MODE = 0
390 METERING_METHOD = 0
391 MUTE_NOTIFY = 0
392 MONITORING_KEY = 0
393 SPONSOR_ID = Example
394 REDIRECT_INFO = 0
395 PRECEDENCE = 220
396 DROP_PKT_COUNT = 0
397 UL_MBR_MTR_PROFILE_IDX = 7
398 DL_MBR_MTR_PROFILE_IDX = 7
399 ;List of SDF filter indices
400 ADC_FILTER_IDX = 3
401 sdf_rules.cfg: |
402 [GLOBAL]
403 NUM_SDF_FILTERS = 4
404
405 [SDF_FILTER_1]
406 DIRECTION = downlink_only
407 IPV4_REMOTE = 13.2.1.113
408 IPV4_REMOTE_MASK = 255.255.255.0
409 PROTOCOL = 17
410 LOCAL_LOW_LIMIT_PORT = 0
411 LOCAL_HIGH_LIMIT_PORT = 65535
412 REMOTE_LOW_LIMIT_PORT = 0
413 REMOTE_HIGH_LIMIT_PORT = 65535
414
415 [SDF_FILTER_2]
416 DIRECTION = uplink_only
417 IPV4_LOCAL = 16.255.255.0
418 IPV4_LOCAL_MASK = 255.255.255.0
419 PROTOCOL = 17
420 LOCAL_LOW_LIMIT_PORT = 0
421 LOCAL_HIGH_LIMIT_PORT = 65535
422 REMOTE_LOW_LIMIT_PORT = 0
423 REMOTE_HIGH_LIMIT_PORT = 65535
424
425 [SDF_FILTER_3]
426 DIRECTION = downlink_only
427 IPV4_REMOTE = 130.10.0.0
428 IPV4_REMOTE_MASK = 255.255.0.0
429 PROTOCOL = 17
430 REMOTE_LOW_LIMIT_PORT = 5060
431 REMOTE_HIGH_LIMIT_PORT = 5060
432
433 [SDF_FILTER_4]
434 DIRECTION = uplink_only
435 IPV4_REMOTE = 103.1.0.0
436 IPV4_REMOTE_MASK = 255.255.0.0
437 PROTOCOL = 17
438 LOCAL_LOW_LIMIT_PORT = 17000
439 LOCAL_HIGH_LIMIT_PORT = 17010
440---
441apiVersion: v1
442kind: Service
443metadata:
Hyunsun Moon06f98552019-08-15 13:44:47 -0600444 name: spgwc
445 labels:
446{{ tuple "spgwc" . | include "mcord-services.metadata_labels" | indent 4 }}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700447spec:
448 selector:
Hyunsun Moon06f98552019-08-15 13:44:47 -0600449{{ tuple "spgwc" . | include "mcord-services.metadata_labels" | indent 4 }}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700450 clusterIP: None
451 ports:
452 - name: s11
453 port: 2123
454 protocol: UDP
455 - name: cpdp
456 port: 21
457 protocol: UDP
458---
459apiVersion: apps/v1
460kind: StatefulSet
461metadata:
Hyunsun Moon06f98552019-08-15 13:44:47 -0600462 name: spgwc
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700463 labels:
Hyunsun Moon06f98552019-08-15 13:44:47 -0600464{{ tuple "spgwc" . | include "mcord-services.metadata_labels" | indent 4 }}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700465spec:
466 replicas: 1
467 selector:
468 matchLabels:
Hyunsun Moon06f98552019-08-15 13:44:47 -0600469{{ tuple "spgwc" . | include "mcord-services.metadata_labels" | indent 6 }}
470 serviceName: spgwc
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700471 template:
472 metadata:
473 labels:
Hyunsun Moon06f98552019-08-15 13:44:47 -0600474{{ tuple "spgwc" . | include "mcord-services.metadata_labels" | indent 8 }}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700475 spec:
Hyunsun Moon06f98552019-08-15 13:44:47 -0600476 {{- if .Values.nodeSelectors.enabled }}
477 nodeSelector:
478 {{ .Values.nodeSelectors.spgwc.label }}: {{ .Values.nodeSelectors.spgwc.value }}
479 {{- end }}
480 serviceAccountName: spgwc
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700481 initContainers:
482 - name: init-spgwc
Hyunsun Moon06f98552019-08-15 13:44:47 -0600483 image: {{ .Values.images.tags.init }}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700484 command: ["/bin/sh", "-co", "pipefail"]
485 args:
Hyunsun Moon2bed68b2019-07-19 17:15:35 -0600486 - until $(kubectl get pod -ojson spgwu-0 2>/dev/null | jq -r '.metadata.annotations["k8s.v1.cni.cncf.io/networks-status"]' | jq -r '.[] | select(.name=="s1u-net") | .ips[0]' > /opt/cp/config/shared/SGW_S1U_IP | [ -s /opt/cp/config/shared/SGW_S1U_IP ]);
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700487 do echo "waiting for SPGWU"; sleep 2; done
488 volumeMounts:
489 - name: shared-data
490 mountPath: /opt/cp/config/shared
491 containers:
492 - name: spgwc
Hyunsun Moon06f98552019-08-15 13:44:47 -0600493 image: {{ .Values.images.tags.spgwc }}
494 imagePullPolicy: {{ .Values.images.pullPolicy }}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700495 stdin: true
496 tty: true
497 command: ["/opt/cp/scripts/launch.sh"]
498 env:
499 - name: MEM_LIMIT
500 valueFrom:
501 resourceFieldRef:
502 containerName: spgwc
503 resource: limits.memory
504 divisor: 1Mi
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700505 - name: CP_ADDR
506 valueFrom:
507 fieldRef:
508 fieldPath: status.podIP
509 - name: DP_ADDR
Hyunsun Moon06f98552019-08-15 13:44:47 -0600510 value: spgwu-0.spgwu
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700511 - name: MME_S11_IP
Hyunsun Moon636e17d2019-07-03 12:52:15 -0500512 value: {{ tuple "mme" "identity" . | include "mcord-services.endpoint_lookup" | quote }}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700513 - name: APN
514 value: apn1
515 - name: IP_POOL_IP
516 value: "16.0.0.0"
517 - name: IP_POOL_MASK
518 value: "255.0.0.0"
Hyunsun Moon06f98552019-08-15 13:44:47 -0600519 {{- if .Values.resources.enabled }}
520 resources:
521{{ toYaml .Values.resources.spgwc | indent 10 }}
522 {{- end }}
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700523 volumeMounts:
524 - name: cp-script
525 mountPath: /opt/cp/scripts/launch.sh
526 subPath: launch.sh
527 - name: cp-config
528 mountPath: /etc/cp/config
529 - name: shared-data
530 mountPath: /opt/cp/config/shared
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700531 volumes:
532 - name: cp-script
533 configMap:
Hyunsun Moon06f98552019-08-15 13:44:47 -0600534 name: spgwc
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700535 defaultMode: 493
536 - name: cp-config
537 configMap:
Hyunsun Moon06f98552019-08-15 13:44:47 -0600538 name: spgwc
Wei-Yu Chen0f12b9c2019-04-18 11:12:59 -0700539 defaultMode: 420
540 - name: shared-data
541 emptyDir: {}