--- apiVersion: v1 items: - apiVersion: v1 data: cnibincopy.sh: |- #!/bin/bash set -e function log() { echo "$(date --iso-8601=seconds) [cnibincopy] ${1}" } DESTINATION_DIRECTORY=/host/opt/cni/bin/ # Perform validation of usage if [ -z "$RHEL8_SOURCE_DIRECTORY" ] || [ -z "$RHEL9_SOURCE_DIRECTORY" ] || [ -z "$DEFAULT_SOURCE_DIRECTORY" ]; then log "FATAL ERROR: You must set env variables: RHEL8_SOURCE_DIRECTORY, RHEL9_SOURCE_DIRECTORY, DEFAULT_SOURCE_DIRECTORY" exit 1 fi if [ ! -d "$DESTINATION_DIRECTORY" ]; then log "FATAL ERROR: Destination directory ($DESTINATION_DIRECTORY) does not exist" exit 1 fi # Collect host OS information . /host/etc/os-release rhelmajor= # detect which version we're using in order to copy the proper binaries case "${ID}" in rhcos|scos) RHEL_VERSION=$(echo "${CPE_NAME}" | cut -f 5 -d :) rhelmajor=$(echo $RHEL_VERSION | sed -E 's/([0-9]+)\.{1}[0-9]+(\.[0-9]+)?/\1/') ;; rhel|centos) rhelmajor=$(echo "${VERSION_ID}" | cut -f 1 -d .) ;; fedora) if [ "${VARIANT_ID}" == "coreos" ]; then rhelmajor=8 else log "FATAL ERROR: Unsupported Fedora variant=${VARIANT_ID}" exit 1 fi ;; *) log "FATAL ERROR: Unsupported OS ID=${ID}"; exit 1 ;; esac # Set which directory we'll copy from, detect if it exists sourcedir= founddir=false case "${rhelmajor}" in 8) if [ -d "${RHEL8_SOURCE_DIRECTORY}" ]; then sourcedir=${RHEL8_SOURCE_DIRECTORY} founddir=true fi ;; 9) if [ -d "${RHEL9_SOURCE_DIRECTORY}" ]; then sourcedir=${RHEL9_SOURCE_DIRECTORY} founddir=true fi ;; *) log "ERROR: RHEL Major Version Unsupported, rhelmajor=${rhelmajor}" ;; esac # When it doesn't exist, fall back to the original directory. if [ "$founddir" == false ]; then log "Source directory unavailable for OS version: ${rhelmajor}" sourcedir=$DEFAULT_SOURCE_DIRECTORY fi # Use a subdirectory called "upgrade" so we can atomically move fully copied files. # We now use --remove-destination after running into an issue with -f not working over symlinks UPGRADE_DIRECTORY=${DESTINATION_DIRECTORY}upgrade_$(uuidgen) rm -Rf $UPGRADE_DIRECTORY mkdir -p $UPGRADE_DIRECTORY cp -r --remove-destination ${sourcedir}* $UPGRADE_DIRECTORY if [ $? -eq 0 ]; then log "Successfully copied files in ${sourcedir} to $UPGRADE_DIRECTORY" else log "Failed to copy files in ${sourcedir} to $UPGRADE_DIRECTORY" rm -Rf $UPGRADE_DIRECTORY exit 1 fi mv -f $UPGRADE_DIRECTORY/* ${DESTINATION_DIRECTORY}/ if [ $? -eq 0 ]; then log "Successfully moved files in $UPGRADE_DIRECTORY to ${DESTINATION_DIRECTORY}" else log "Failed to move files in $UPGRADE_DIRECTORY to ${DESTINATION_DIRECTORY}" rm -Rf $UPGRADE_DIRECTORY exit 1 fi rm -Rf $UPGRADE_DIRECTORY kind: ConfigMap metadata: annotations: kubernetes.io/description: | This is a script used to copy CNI binaries based on host OS release.openshift.io/version: 4.20.19 creationTimestamp: "2026-04-24T14:20:40Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: f:cnibincopy.sh: {} f:metadata: f:annotations: f:kubernetes.io/description: {} f:release.openshift.io/version: {} f:ownerReferences: k:{"uid":"de53244e-85fa-44d5-8630-189d12f776a4"}: {} manager: cluster-network-operator/operconfig operation: Apply time: "2026-04-24T14:20:40Z" name: cni-copy-resources namespace: openshift-multus ownerReferences: - apiVersion: operator.openshift.io/v1 blockOwnerDeletion: true controller: true kind: Network name: cluster uid: de53244e-85fa-44d5-8630-189d12f776a4 resourceVersion: "2797" uid: 4653220a-d277-4689-af40-23e2a3d4522f - apiVersion: v1 data: allowlist.conf: |- ^net.ipv4.conf.IFNAME.accept_redirects$ ^net.ipv4.conf.IFNAME.accept_source_route$ ^net.ipv4.conf.IFNAME.arp_accept$ ^net.ipv4.conf.IFNAME.arp_notify$ ^net.ipv4.conf.IFNAME.disable_policy$ ^net.ipv4.conf.IFNAME.secure_redirects$ ^net.ipv4.conf.IFNAME.send_redirects$ ^net.ipv6.conf.IFNAME.accept_ra$ ^net.ipv6.conf.IFNAME.accept_redirects$ ^net.ipv6.conf.IFNAME.accept_source_route$ ^net.ipv6.conf.IFNAME.arp_accept$ ^net.ipv6.conf.IFNAME.arp_notify$ ^net.ipv6.neigh.IFNAME.base_reachable_time_ms$ ^net.ipv6.neigh.IFNAME.retrans_time_ms$ kind: ConfigMap metadata: annotations: kubernetes.io/description: | Sysctl allowlist for nodes. release.openshift.io/version: 4.20.19 creationTimestamp: "2026-04-24T14:20:40Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: .: {} f:allowlist.conf: {} f:metadata: f:annotations: .: {} f:kubernetes.io/description: {} f:release.openshift.io/version: {} manager: network-operator operation: Update time: "2026-04-24T14:20:40Z" name: cni-sysctl-allowlist namespace: openshift-multus resourceVersion: "2787" uid: ee2c86a1-e1d6-48d7-bcef-3dfd94793bd4 - apiVersion: v1 data: allowlist.conf: |- ^net.ipv4.conf.IFNAME.accept_redirects$ ^net.ipv4.conf.IFNAME.accept_source_route$ ^net.ipv4.conf.IFNAME.arp_accept$ ^net.ipv4.conf.IFNAME.arp_notify$ ^net.ipv4.conf.IFNAME.disable_policy$ ^net.ipv4.conf.IFNAME.secure_redirects$ ^net.ipv4.conf.IFNAME.send_redirects$ ^net.ipv6.conf.IFNAME.accept_ra$ ^net.ipv6.conf.IFNAME.accept_redirects$ ^net.ipv6.conf.IFNAME.accept_source_route$ ^net.ipv6.conf.IFNAME.arp_accept$ ^net.ipv6.conf.IFNAME.arp_notify$ ^net.ipv6.neigh.IFNAME.base_reachable_time_ms$ ^net.ipv6.neigh.IFNAME.retrans_time_ms$ kind: ConfigMap metadata: annotations: kubernetes.io/description: | Sysctl allowlist for nodes. release.openshift.io/version: 4.20.19 creationTimestamp: "2026-04-24T14:20:40Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: f:allowlist.conf: {} f:metadata: f:annotations: f:kubernetes.io/description: {} f:release.openshift.io/version: {} f:ownerReferences: k:{"uid":"de53244e-85fa-44d5-8630-189d12f776a4"}: {} manager: cluster-network-operator/operconfig operation: Apply time: "2026-04-24T14:20:40Z" name: default-cni-sysctl-allowlist namespace: openshift-multus ownerReferences: - apiVersion: operator.openshift.io/v1 blockOwnerDeletion: true controller: true kind: Network name: cluster uid: de53244e-85fa-44d5-8630-189d12f776a4 resourceVersion: "2785" uid: 2eb4f44e-0bbb-4e50-996b-2cd14e156347 - apiVersion: v1 data: ca.crt: | -----BEGIN CERTIFICATE----- MIIDPDCCAiSgAwIBAgIIZ+ZT4wU77uEwDQYJKoZIhvcNAQELBQAwJjESMBAGA1UE CxMJb3BlbnNoaWZ0MRAwDgYDVQQDEwdyb290LWNhMB4XDTI2MDQyNDE0MTc1N1oX DTM2MDQyMTE0MTc1N1owJjESMBAGA1UECxMJb3BlbnNoaWZ0MRAwDgYDVQQDEwdy b290LWNhMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9TANmN+//u6M LGyHJdM2cvMN+b5/Biwo1B2DYv8/VQJt/vbv+53R3zPIgEcFRb97ZxzwxXFO1w5S bzTu9zIP/UJ4uI2lmoGhh9Nau163+Q8+euq7tqiNjyhUc2D9JKikaoPVatS4wL/A Jyrj4ETySgRpkrZwWAQi/5AwDE2slsK25It8i+U84KZiEOTX10vHQjWKQVdF1ZRe ClfrYAR6cDbhPoAKn0BwDT23gcNNL5IaorC0Qs3cZQo28vhcDCJXuaSD6l2oU0Gp 7Gels1w83oxVazr37BK2tRZ8Sy5/bwwTc0JsDvR5PLQKIXGDYc/K3hLeozWM+CF/ HscY+LseWQIDAQABo24wbDAOBgNVHQ8BAf8EBAMCAqQwDwYDVR0TAQH/BAUwAwEB /zBJBgNVHQ4EQgRAVNZtaz4LIiuM8G0GcLc5hyxI3fl8207rEHmmoAGO+lvB0MQ+ KDnPBc/IZ2lGzrkfNwsMv4Ckityhg3WqAGqhbTANBgkqhkiG9w0BAQsFAAOCAQEA VExfe4VjCf0ExRYGzEAlH408sT9h6cuJbrbKWI68E7qxjtg7bMp1RXLJuVL4TF6d bXLqzlLZ4ZVOilLpqVTIlttTjIcxPh2kp63MDcCb/ebkYXIFmnpOAxGFiL8djt++ na6LVPwSzz7B2dI/WAgM/4oBT5uJzvKrCbsfQQVdxVz0gMV6nh1/e26tHtHu0uAq UusaZh/qN3wk3aFNDT5Qt+zabTQii8YW5XlkfKCSdyQnZNnE4640iLbONQjI/nsh 1kHOzgHLkPoBLloH1MnSrdsT2I0cl/sOq+hYfcYz+RO5KmvZkqxB9HO0Cwd//tHh N2opv7k5DndlZMinNkWo9Q== -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIEADCCAuigAwIBAgIIfp0q1Klm0cwwDQYJKoZIhvcNAQELBQAwJjESMBAGA1UE CxMJb3BlbnNoaWZ0MRAwDgYDVQQDEwdyb290LWNhMB4XDTI2MDQyNDE0MTgyNloX DTI3MDQyNDE0MTgyNlowMDESMBAGA1UEChMJb3BlbnNoaWZ0MRowGAYDVQQDExFv cGVuc2hpZnQtaW5ncmVzczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB AOPAfYi/5REsDkP0jv/F9wh9FmKYBjfmv7oKen/G6plJyn25JSOWiLVI9FBbWIcL /RW0agCUB/e0qjT0/jmajrKTugEHqcv93cG5rWDf7euQ622CcbBmsS0un4ZZ8Kd1 CXHz98bXyahx0fFnrZKRuH3ODAFBRtnoJ1oPetF87Q3e+TEwQB1EZUpwutoidz+c x5IeoEo4p/DoHWz+JWyyRZ2KPfNGSJ2OmI9NNiejlBkoVErnWvKwmWJ/rzVYeOHx OEzWoC2wnup+bon60UHXDObGYTGAR6oPmbQVeAJ+CEy0ZFeMrnnP2DHkA5aQltar J4mJ7lClcVmw0wIi+Knn2W8CAwEAAaOCASYwggEiMA4GA1UdDwEB/wQEAwIFoDAd BgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADBJBgNV HQ4EQgRAoMfemjZ1Q6uXCJGL7Rk9wf2xqcrRExifraiXjZhCrYpfJEuspSDWM1Zr GlGra3Wa8KmFgP3VTsHKZjpVrtheLDBLBgNVHSMERDBCgEBU1m1rPgsiK4zwbQZw tzmHLEjd+XzbTusQeaagAY76W8HQxD4oOc8Fz8hnaUbOuR83Cwy/gKSK3KGDdaoA aqFtMEsGA1UdEQREMEKCQCouYXBwcy5hYmFiZTM5Yy0xMmE5LTQzNTktYjA4MC05 NDdmNTRmM2ZhZWYucHJvZC5rb25mbHV4ZWFhcy5jb20wDQYJKoZIhvcNAQELBQAD ggEBAEovg8Y78d37adfSNhon2vWVOZ4QAcueo/T44Gp8uuwIKWPC1fsNQAPF+1Mc XNlhVSHpWfJiWK1yn1LnV9BHXsBQugk47k2Oo3TTmWr8SAuLn54KgrWYXBruoos5 b45unkYDb8wbNpVsKnH48ILxbDUUYCiCPBbh6EUTZpkdHni8t/q5YqWSq4hi7nYe Td2o04v5oNE48Ziit0y4cKE1IUqiUmMvIqkNSypyB2HNnsdx0bNtRDSQQdBGKgTn cJWZf/h7CcKxdMWhlb5RThSGeJl4nrSF+LhczMIFC2lPTZHcrulJUT2QIru4xoMQ B+/k2ndIbyu3KqZ67Psg/Go4csA= -----END CERTIFICATE----- kind: ConfigMap metadata: annotations: kubernetes.io/description: Contains a CA bundle that can be used to verify the kube-apiserver when using internal endpoints such as the internal service IP or kubernetes.default.svc. No other usage is guaranteed across distributions of Kubernetes clusters. creationTimestamp: "2026-04-24T14:20:37Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: .: {} f:ca.crt: {} f:metadata: f:annotations: .: {} f:kubernetes.io/description: {} manager: kube-controller-manager operation: Update time: "2026-04-24T14:21:07Z" name: kube-root-ca.crt namespace: openshift-multus resourceVersion: "4389" uid: f6188cb9-4067-4631-afd3-8980f57765f4 - apiVersion: v1 data: daemon-config.json: | { "cniVersion": "0.3.1", "chrootDir": "/hostroot", "logToStderr": true, "logLevel": "verbose", "binDir": "/var/lib/cni/bin", "perNodeCertificate": { "enabled": true, "bootstrapKubeconfig": "/var/lib/kubelet/kubeconfig", "certDir": "/etc/cni/multus/certs", "certDuration": "24h" }, "cniConfigDir": "/host/etc/cni/net.d", "multusConfigFile": "auto", "multusAutoconfigDir": "/host/run/multus/cni/net.d", "namespaceIsolation": true, "globalNamespaces": "default,openshift-multus,openshift-sriov-network-operator,openshift-cnv", "readinessindicatorfile": "/host/run/multus/cni/net.d/10-ovn-kubernetes.conf", "daemonSocketDir": "/run/multus/socket", "socketDir": "/host/run/multus/socket", "auxiliaryCNIChainName": "vendor-cni-chain" } kind: ConfigMap metadata: creationTimestamp: "2026-04-24T14:20:40Z" labels: app: multus tier: node managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: f:daemon-config.json: {} f:metadata: f:labels: f:app: {} f:tier: {} f:ownerReferences: k:{"uid":"de53244e-85fa-44d5-8630-189d12f776a4"}: {} manager: cluster-network-operator/operconfig operation: Apply time: "2026-04-24T14:20:40Z" name: multus-daemon-config namespace: openshift-multus ownerReferences: - apiVersion: operator.openshift.io/v1 blockOwnerDeletion: true controller: true kind: Network name: cluster uid: de53244e-85fa-44d5-8630-189d12f776a4 resourceVersion: "2806" uid: 9e4e8133-9b93-4846-b4b6-7272b5daacc4 - apiVersion: v1 data: cabundle.crt: |- -----BEGIN CERTIFICATE----- MIIDUTCCAjmgAwIBAgIIOqXidtjPJBcwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE Awwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc3NzA0MDgwMTAe Fw0yNjA0MjQxNDI2NDBaFw0yODA2MjIxNDI2NDFaMDYxNDAyBgNVBAMMK29wZW5z aGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3NzcwNDA4MDEwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhO13yf0PIQoAouQMya8yO/E48Ug0olX+5 wDyXLENFkBLku9Kw13TPce61uAr53F2pxbrdyC/LMWkWkezuGoWOYO5FsRKX2mub MPoxnFCG5bkvIHuZignQaCIqpEmcWqdSaXlghZJxp5Urp6Q5B4FbTjMDh5kCIRmk IMvNKUY+Yrvk1ZBKFivYGFHu/olO/0wD1f5vxtOyoM055xTC3vEg439UwaQcpjaK XikEh0ZkKajFGyO8GJh4+M2u3tazsrTE2WHQSvLawYha8L8l/UVtiolO2HlCAv+N XOHV4swWQDkqd0rzdpKFq5q/UAwkOwj6KVkEpJZ7zKoYGRow0vr9AgMBAAGjYzBh MA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSaVSpS Okf4jxd69PQ+OHJeRQ6ZojAfBgNVHSMEGDAWgBSaVSpSOkf4jxd69PQ+OHJeRQ6Z ojANBgkqhkiG9w0BAQsFAAOCAQEAJceAxL/DNnH3PZIbCzWC/rtK7vtVgTnyj6d8 o1BKQgvQjrKGds6c1xndbzI1wrWGePX6RX47JPGZ5quEDZoxTLsKp/GMd1Q1e5Ly OOeiJKRfhAzT1o8ESR2rmqZRkcm2fU4S0CLNsK2Nwu1FgHuhCwGPsYdYJMPTRL6z 1DQNDHh7X2oQekwH2B4tVitHI74AZW0hjh1JDab4DO3YemPXuPYP3/mnAzjuA8Ye PH3WF072lvWheHnMhgCj8qmXfgPSyFLR3+KUIYwoLXTIlJ9+WS4g5UU1AG9GQflp MSgBZXGLHp3AjQ9joVC3qS3Ph2xsV/oePuLiybUSShVFvoQ+QQ== -----END CERTIFICATE----- kind: ConfigMap metadata: creationTimestamp: "2026-04-24T14:34:05Z" labels: opendatahub.io/managed: "true" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: .: {} f:cabundle.crt: {} f:metadata: f:labels: .: {} f:opendatahub.io/managed: {} manager: manager operation: Update time: "2026-04-24T14:34:05Z" name: odh-kserve-custom-ca-bundle namespace: openshift-multus resourceVersion: "13717" uid: 9a36bf99-4287-40df-b4e2-9936dca781eb - apiVersion: v1 data: service-ca.crt: | -----BEGIN CERTIFICATE----- MIIDUTCCAjmgAwIBAgIIOqXidtjPJBcwDQYJKoZIhvcNAQELBQAwNjE0MDIGA1UE Awwrb3BlbnNoaWZ0LXNlcnZpY2Utc2VydmluZy1zaWduZXJAMTc3NzA0MDgwMTAe Fw0yNjA0MjQxNDI2NDBaFw0yODA2MjIxNDI2NDFaMDYxNDAyBgNVBAMMK29wZW5z aGlmdC1zZXJ2aWNlLXNlcnZpbmctc2lnbmVyQDE3NzcwNDA4MDEwggEiMA0GCSqG SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDhO13yf0PIQoAouQMya8yO/E48Ug0olX+5 wDyXLENFkBLku9Kw13TPce61uAr53F2pxbrdyC/LMWkWkezuGoWOYO5FsRKX2mub MPoxnFCG5bkvIHuZignQaCIqpEmcWqdSaXlghZJxp5Urp6Q5B4FbTjMDh5kCIRmk IMvNKUY+Yrvk1ZBKFivYGFHu/olO/0wD1f5vxtOyoM055xTC3vEg439UwaQcpjaK XikEh0ZkKajFGyO8GJh4+M2u3tazsrTE2WHQSvLawYha8L8l/UVtiolO2HlCAv+N XOHV4swWQDkqd0rzdpKFq5q/UAwkOwj6KVkEpJZ7zKoYGRow0vr9AgMBAAGjYzBh MA4GA1UdDwEB/wQEAwICpDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSaVSpS Okf4jxd69PQ+OHJeRQ6ZojAfBgNVHSMEGDAWgBSaVSpSOkf4jxd69PQ+OHJeRQ6Z ojANBgkqhkiG9w0BAQsFAAOCAQEAJceAxL/DNnH3PZIbCzWC/rtK7vtVgTnyj6d8 o1BKQgvQjrKGds6c1xndbzI1wrWGePX6RX47JPGZ5quEDZoxTLsKp/GMd1Q1e5Ly OOeiJKRfhAzT1o8ESR2rmqZRkcm2fU4S0CLNsK2Nwu1FgHuhCwGPsYdYJMPTRL6z 1DQNDHh7X2oQekwH2B4tVitHI74AZW0hjh1JDab4DO3YemPXuPYP3/mnAzjuA8Ye PH3WF072lvWheHnMhgCj8qmXfgPSyFLR3+KUIYwoLXTIlJ9+WS4g5UU1AG9GQflp MSgBZXGLHp3AjQ9joVC3qS3Ph2xsV/oePuLiybUSShVFvoQ+QQ== -----END CERTIFICATE----- kind: ConfigMap metadata: annotations: service.beta.openshift.io/inject-cabundle: "true" creationTimestamp: "2026-04-24T14:20:37Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: {} f:metadata: f:annotations: .: {} f:service.beta.openshift.io/inject-cabundle: {} manager: kube-controller-manager operation: Update time: "2026-04-24T14:20:37Z" - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: f:service-ca.crt: {} manager: service-ca-operator operation: Update time: "2026-04-24T14:26:55Z" name: openshift-service-ca.crt namespace: openshift-multus resourceVersion: "8226" uid: 0855c55f-95ff-4441-944e-fcf665a6ab61 - apiVersion: v1 data: whereabouts.conf: | { "datastore": "kubernetes", "kubernetes": { "kubeconfig": "/etc/kubernetes/cni/net.d/whereabouts.d/whereabouts.kubeconfig" }, "reconciler_cron_expression": "30 4 * * *", "log_level": "verbose", "configuration_path": "/etc/kubernetes/cni/net.d/whereabouts.d" } kind: ConfigMap metadata: creationTimestamp: "2026-04-24T14:20:40Z" managedFields: - apiVersion: v1 fieldsType: FieldsV1 fieldsV1: f:data: f:whereabouts.conf: {} f:metadata: f:ownerReferences: k:{"uid":"de53244e-85fa-44d5-8630-189d12f776a4"}: {} manager: cluster-network-operator/operconfig operation: Apply time: "2026-04-24T14:20:40Z" name: whereabouts-flatfile-config namespace: openshift-multus ownerReferences: - apiVersion: operator.openshift.io/v1 blockOwnerDeletion: true controller: true kind: Network name: cluster uid: de53244e-85fa-44d5-8630-189d12f776a4 resourceVersion: "2802" uid: 1c2447d9-75dc-4895-a821-bf82c3d11031 kind: ConfigMapList metadata: resourceVersion: "21615"