La spécification technique du client comprenait plus de 380 exigences fonctionnelles, couvrant la terminaison des abonnés, le routage, la QoS, le NAT, les mécanismes de haute disponibilité, la supervision et la protection du Control Plane.
L’objectif principal des tests était de vérifier le fonctionnement d’un large éventail de fonctions réseau au sein d’une seule plateforme et d’une architecture unifiée. Pour cela, des scénarios de test ont été développés afin de reproduire au plus près les conditions réelles de déploiement dans le réseau d’un fournisseur de services.
Plateforme de test
L’environnement de test a été mis en place à l’aide d’un générateur de trafic Ixia XGS.
Ixia XGS est une plateforme modulaire de test réseau conçue pour la validation des couches L2 à L7. Elle prend en charge les interfaces 10G, 40G et 100G et permet de créer des environnements de test à haute densité.
L’architecture de la plateforme repose sur une matrice de commutation interne à haut débit, permettant de traiter d’importants volumes de trafic et de partager les ressources entre les modules. Les modules peuvent être remplacés sans interrompre les tests en cours, ce qui simplifie la maintenance et l’exploitation.
L’un des principaux objectifs du projet était de vérifier que l’ensemble des fonctions pouvait fonctionner simultanément sur une seule plateforme, sans répartir les différents rôles entre plusieurs solutions spécialisées.

Configuration de l’environnement de test
Les tests ont été réalisés sur un serveur équipé de 128 cœurs CPU.
Spécifications du serveur :
AMD EPYC 9754 (128 cœurs)
Dissipateur thermique 2U
12 × 32 Go DDR5 RDIMM 5600 MHz
2 × SSD SATA 960 Go (baies frontales, PM893)
2 × adaptateurs PCIe 4.0 double port 100GbE QSFP28
1 × SSD NVMe 1 To (990 PRO)
2 × interfaces RJ45 1Gb intégrées
Interface de gestion RJ45 1Gb dédiée
2 × alimentations CA 1300 W
Kit de montage en rack
Garantie standard 8x5xNBD+5, 3 ans
Deux configurations de test ont été utilisées.
La première configuration utilisait des interfaces 100G : 2 × 100G en entrée et 2 × 100G en sortie. Cette configuration a été utilisée pour valider les scénarios de trafic à haut débit et le fonctionnement du BNG avec des liaisons 100G.
dpdk_device=10:pci:41:00.0
dpdk_device=11:pci:41:00.1
dpdk_device=20:pci:01:00.0
dpdk_device=21:pci:01:00.1
in_dev=10:20
out_dev=11:21
lag {
name=IN
device=10
device=20
lacp=2
system_id=6c:b3:11:79:81:5e
priority=32768
short_timeout=on
balance_algo=0
}
lag {
name=OUT
device=11
device=21
lacp=2
system_id=6c:b3:11:79:81:5f
priority=32768
short_timeout=on
balance_algo=0
}
dpdk_engine=6
dpdk_rss=10
num_threads=98
dpdk_tx_queue_size=8160
rx_dispatcher=2
support_service_18=1
syslog_level=7
scale_factor=10
mem_slices_ip=32
dpdk_mempool_size=8000000
mem_tracking_flow=130000000
mem_tracking_ip=100000000
mem_ipv6_tracking_flow=40000000
mem_ipv6_tracking_ip=30000000
mem_ssl_parsers=18000000
mem_http_parsers=512000
mem_ip_billdata_recs=500000
mem_preset=1
cloud=0
ctrl_port=29000
ctrl_dev=lo
federal_black_list=0
black_list_redirect=
netflow=12
enable_acct=1
enable_auth=1
auth_servers=127.0.0.1%lo:29002
bras_enable=1
bras_arp_ip=10.1.0.62
bras_arp_mac=6c:b3:11:79:81:5d
bras_ip_filtering=0x0001
bras_terminate_l2=1
bras_dhcp_mode=2
bras_dhcp_ratelimit=17
bras_dhcp_disconnect=0x000B
bras_dhcp_ratelimit_ban=5
bras_dhcp_timeout=17
bras_vlan_terminate=3
bras_qinq_type=0x8100
bras_arp_proxy=0x003
bras_subs_id=qinq+mac,vlan+mac,mac
bras_ip4db_bucket_count=1048576
ipv6=1
bras_ipv6=1
bras_dhcp6_mode=1
bras_ipv6_address=2A0F:1900:2000::31
bras_icmp6_send_rtradv=1
bras_icmp6_min_rtradv_interval=60
bras_icmp6_max_rtradv_interval=80
bras_pppoe_enable=1
bras_pppoe_session=150000
bras_ppp_auth_list=1,2,3
bras_pppoe_restore_on_startup=0
bras_ppp_idle_timeout=30
bras_ppp_restart_timeout=3
bras_ppp_ping_timeout=5
bras_ppp_max_failure=3
netflow_dev=lo
netflow_timeout=10
netflow_full_collector_type=1
netflow_full_collector=127.0.0.1:1500
netflow_passive_timeout=20
netflow_active_timeout=60
ipfix_mtu_limit=1400
ipfix_dev=bond0
ipfix_udp_collectors=10.169.29.173:1602
router=1
router_netns=router
router_kernel_table=101
router_subs_announce=0x100007
router_default_vrf=vrf-grt
bras_vrf_isolation=1
router_max_ip4_route_count=5000000
router_max_ip6_route_count=800000
router_device {
vrf=vrf-grt
device=11
tap=bng
peer=rib
subnet=224.0.0.5/32
subnet=224.0.0.6/32
subnet=10.1.0.1/32
subnet=10.2.0.1/32
subnet=10.3.0.1/32
subnet=10.4.0.1/32
subnet6=2a0f:1900:2000::30/128
subnet6=2a0f:1900:2002::30/128
subnet6=fe80::2898:7ff:fe59:880e/128
subnet6=ff02::5/128
subnet6=ff02::6/128
}
router_vrf {
id=vrf-grt
netns=router
kernel_table=100
neighbor_cache=shared
}
La deuxième configuration utilisait 16 interfaces d’entrée 10G et 2 interfaces de sortie 100G. Cette configuration est destinée aux déploiements BNG dans lesquels les côtés LAN et WAN utilisent des types d’interfaces différents.
dpdk_device=10:pci:0000:41:00.0
dpdk_device=20:pci:0000:01:00.0
dpdk_device=30:pci:0000:c2:00.0
dpdk_device=31:pci:0000:c2:00.1
dpdk_device=32:pci:0000:c2:00.2
dpdk_device=33:pci:0000:c2:00.3
dpdk_device=34:pci:0000:c2:00.4
dpdk_device=35:pci:0000:c2:00.5
dpdk_device=36:pci:0000:c2:00.6
dpdk_device=37:pci:0000:c2:00.7
dpdk_device=40:pci:0000:02:00.0
dpdk_device=41:pci:0000:02:00.1
dpdk_device=42:pci:0000:02:00.2
dpdk_device=43:pci:0000:02:00.3
dpdk_device=50:pci:0000:89:00.0
dpdk_device=51:pci:0000:89:00.1
dpdk_device=52:pci:0000:89:00.2
dpdk_device=53:pci:0000:89:00.3
in_dev=30:31:32:33:34:35:36:37:40:41:42:43:50:51:52:53
out_dev=10:10:10:10:10:10:10:10:10:20:20:20:20:20:20:20:20
lag {
name=IN
device=30
device=31
device=32
device=33
device=34
device=35
device=36
device=37
device=40
device=41
device=42
device=43
device=50
device=51
device=52
device=53
lacp=2
system_id=6c:b3:11:79:81:5e
priority=32768
short_timeout=on
balance_algo=0
}
lag {
name=OUT
device=10
device=20
lacp=2
system_id=6c:b3:11:79:81:5f
priority=32768
short_timeout=on
balance_algo=0
}
dpdk_engine=7
dpdk_dispatch=30,31;mempool=main10G
dpdk_dispatch=32,33;mempool=main10G
dpdk_dispatch=34,35;mempool=main10G
dpdk_dispatch=36,37;mempool=main10G
dpdk_dispatch=40,41;mempool=main10G
dpdk_dispatch=42,43;mempool=main10G
dpdk_dispatch=50,51;mempool=main10G
dpdk_dispatch=52,53;mempool=main10G
dpdk_dispatch=10,20;rss=16;mempool=main100G
dpdk_mempool=name=main10G;size=1600000
dpdk_mempool=name=main100G;size=8000000
num_threads=98
dpdk_tx_queue_size=8160
rx_dispatcher=2
support_service_18=1
syslog_level=7
scale_factor=10
mem_slices_ip=32
mem_tracking_flow=130000000
mem_tracking_ip=100000000
mem_ipv6_tracking_flow=40000000
mem_ipv6_tracking_ip=30000000
mem_ssl_parsers=18000000
mem_http_parsers=512000
mem_ip_billdata_recs=500000
mem_preset=1
cloud=0
ctrl_port=29000
ctrl_dev=lo
federal_black_list=0
black_list_redirect=
netflow=12
enable_acct=1
enable_auth=1
auth_servers=127.0.0.1%lo:29002
bras_enable=1
bras_arp_ip=10.1.0.62
bras_arp_mac=6c:b3:11:79:81:5d
bras_ip_filtering=0x0001
bras_terminate_l2=1
bras_dhcp_mode=2
bras_dhcp_ratelimit=17
bras_dhcp_disconnect=0x000B
bras_dhcp_ratelimit_ban=5
bras_dhcp_timeout=17
bras_vlan_terminate=3
bras_qinq_type=0x8100
bras_arp_proxy=0x003
bras_subs_id=qinq+mac,vlan+mac,mac
bras_ip4db_bucket_count=1048576
ipv6=1
bras_ipv6=1
bras_dhcp6_mode=1
bras_ipv6_address=2A0F:1900:2000::31
bras_icmp6_send_rtradv=1
bras_icmp6_min_rtradv_interval=60
bras_icmp6_max_rtradv_interval=80
bras_pppoe_enable=1
bras_pppoe_session=150000
bras_ppp_auth_list=1,2,3
bras_pppoe_restore_on_startup=0
bras_ppp_idle_timeout=30
bras_ppp_restart_timeout=3
bras_ppp_ping_timeout=5
bras_ppp_max_failure=3
netflow_dev=lo
netflow_timeout=10
netflow_full_collector_type=1
netflow_full_collector=127.0.0.1:1500
netflow_passive_timeout=20
netflow_active_timeout=60
ipfix_mtu_limit=1400
ipfix_dev=bond0
ipfix_udp_collectors=10.169.29.173:1602
router=1
router_netns=router
router_kernel_table=101
router_subs_announce=0x100007
router_default_vrf=vrf-grt
bras_vrf_isolation=1
router_max_ip4_route_count=5000000
router_max_ip6_route_count=800000
router_device {
vrf=vrf-grt
device=10
tap=bng
peer=rib
subnet=224.0.0.5/32
subnet=224.0.0.6/32
subnet=10.1.0.1/32
subnet=10.2.0.1/32
subnet=10.3.0.1/32
subnet=10.4.0.1/32
subnet6=2a0f:1900:2000::30/128
subnet6=2a0f:1900:2002::30/128
subnet6=fe80::2898:7ff:fe59:880e/128
subnet6=ff02::5/128
subnet6=ff02::6/128
}
router_vrf {
id=vrf-grt
netns=router
kernel_table=100
neighbor_cache=shared
}
L’environnement de test utilisait des scénarios dual-stack avec prise en charge simultanée d’IPv4 et d’IPv6, l’isolation VRF, DHCPv4/v6, PPPoE, QinQ et le routage dynamique via BGP et OSPF.
Une attention particulière a été portée aux scénarios impliquant de grandes tables de routage, notamment :
- jusqu’à 5 millions de routes IPv4 ;
- jusqu’à 800 000 routes IPv6 ;
- prise en charge de BGP et OSPF ;
- scénarios avec une table de routage BGP complète (full view).
Scénarios de test
Les scénarios de test ont été définis directement à partir des exigences techniques du client et couvrent les principales fonctions utilisées par un BNG dans un réseau de production.
La première étape porte sur la terminaison des sessions d’abonnés, notamment PPPoE et IPoE dans plusieurs modèles de déploiement : VLAN individuels, plages de VLAN et QinQ, y compris les scénarios avec restrictions d’admission des sessions.
Pour IPoE, des scénarios à grande échelle ont également été validés, avec jusqu’à 128 000 sessions d’abonnés dans la configuration actuelle.

L’étape suivante porte sur la gestion des sessions. Les tests vérifient la gestion des délais d’expiration, l’application des attributs RADIUS, le contrôle dynamique des sessions via CoA, ainsi que l’attribution des services et des politiques d’accès.

La fonctionnalité d’adressage IP est ensuite validée, notamment DHCP, DHCPv6, les pools d’adresses locaux et les scénarios dual-stack.
Les configurations avec plusieurs pools d’adresses et les déploiements multiservices utilisant un serveur DHCP local ont également été testés. Les fonctionnalités ont été vérifiées avec succès dans différentes variantes de configuration.


La zone de validation suivante concerne le routage, notamment les tables de routage, la montée en charge du nombre de routes, les mises à jour des routes et le fonctionnement de base des protocoles OSPF et BGP.
Des tests supplémentaires ont porté sur les grandes tables de routage et les configurations BGP à grande échelle.


Les mécanismes de gestion du trafic ont également été testés, notamment la limitation du débit, les profils QoS et le marquage du trafic.

La validation complémentaire couvre les fonctions fondamentales du réseau et de résilience, notamment les mécanismes de couche 2, l’agrégation de liens, ECMP, la protection du Control Plane, le traitement du trafic malformé, le NAT et les fonctions de filtrage.
Dans le cadre de la validation d’ECMP, des groupes comprenant jusqu’à 32 next hops ont été testés avec succès, démontrant une distribution correcte du trafic et un basculement sans perte de paquets.


Le dernier bloc de validation porte sur les outils d’exploitation, notamment l’accès d’administration, la supervision et la collecte de statistiques, avec des scénarios spécifiques couvrant SNMPv3 et les communications chiffrées.

Le fonctionnement correct des jumbo frames a également été vérifié avec succès.


Une attention particulière a été accordée à la scalabilité. Au cours des tests, des configurations avec un grand nombre d’abonnés, des tables de routage étendues et une forte densité de connexions ont été validées.
Résultats
Dans le cadre du projet, un environnement de test a été préparé et validé afin de reproduire les scénarios opérationnels typiques d’un réseau de fournisseur de services à couverture nationale.
Cette approche de test ne consiste pas simplement en une série de vérifications isolées : elle permet de comprendre de manière globale le comportement du système dans des conditions opérationnelles réelles. Pour les projets à grande échelle, cela signifie que la solution fait l’objet d’un cycle complet de validation avant son déploiement et que son comportement dans les scénarios critiques est connu à l’avance. Un ensemble unifié de cas de test et une méthodologie de validation cohérente sont utilisés tout au long du processus.
Les mêmes scénarios de test que ceux utilisés pour les grands déploiements sont également appliqués aux projets de plus petite taille. Ainsi, les opérateurs de toute taille bénéficient d’une solution ayant fait l’objet du même niveau de vérification.
Dans le prochain article, nous passerons aux tests de performance et examinerons les métriques réelles de débit. Nous montrerons également comment le BNG se comporte sous charge lorsqu’il est testé avec un générateur de trafic et présenterons les résultats obtenus dans différents scénarios de déploiement.

