La spécification technique du client incluait plus de 380 exigences fonctionnelles, couvrant la terminaison d’abonnés, le routage, la QoS, le NAT, les mécanismes de haute disponibilité, la supervision et la protection du plan de contrôle.
L’objectif principal des tests était de vérifier le fonctionnement d’un large éventail de fonctions réseau au sein d’une plateforme unique 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 un réseau de fournisseur de services.
Plateforme de test
L’environnement de test a été construit à 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 haute vitesse, permettant de traiter de grands 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 objectifs clés du projet était de vérifier que l’ensemble des fonctions pouvait fonctionner simultanément sur une seule plateforme, sans répartir les rôles entre plusieurs solutions spécialisées.
Configuration du banc 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 2U
12 × 32 Go DDR5 RDIMM 5600 MHz
2 × SSD SATA 960 Go (emplacements avant, PM893)
2 × adaptateurs PCIe 4.0 100GbE QSFP28 double port
1 × SSD NVMe 1 To (990 PRO)
2 × interfaces RJ45 1Gb intégrées
Interface de gestion RJ45 1Gb dédiée
2 × alimentations AC 1300W
Kit de montage en rack
Garantie standard 8x5xNBD+5, 3 ans
Deux configurations de banc 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 des scénarios de trafic à haut débit et le fonctionnement du BNG avec des liens 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 comprenait 16 interfaces 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, ainsi que le routage dynamique via BGP et OSPF.
Une attention particulière a été portée aux scénarios 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 de table de routage BGP full-view.
Scénarios de test
Les scénarios de test ont été dérivés directement 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 se concentre sur la terminaison des sessions abonnés, incluant PPPoE et IPoE dans plusieurs modèles de déploiement : VLAN individuels, plages de VLAN et QinQ, y compris des scénarios avec restrictions d’admission de sessions.
Pour IPoE, des scénarios à grande échelle ont également été validés, incluant jusqu’à 128 000 sessions abonnés dans la configuration actuelle.
L’étape suivante se concentre sur la gestion des sessions. Les tests vérifient la gestion des timeouts, 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, incluant DHCP, DHCPv6, les pools d’adresses locaux et les scénarios dual-stack.
Des déploiements multi-pools et multi-services utilisant un serveur DHCP local ont également été testés. La fonctionnalité a été validée avec succès dans différentes variantes de configuration.
Le domaine suivant de validation concerne le routage, incluant les tables de routage, la montée en charge du routage, les mises à jour de routes et le fonctionnement de base des protocoles OSPF et BGP.
Des tests supplémentaires ont couvert les grandes tables de routage ainsi que des configurations BGP à grande échelle.
Les mécanismes de gestion du trafic ont également été testés, notamment le contrôle de débit, les profils QoS et le marquage du trafic.
La validation supplémentaire couvre les fonctions de fondation réseau et de résilience, notamment les mécanismes de couche 2, l’agrégation de liens, ECMP, la protection du plan de contrôle, la gestion des paquets malformés, le NAT et les fonctions de filtrage.
Dans le cadre de la validation ECMP, des groupes contenant jusqu’à 32 next hops ont été testés avec succès, démontrant une répartition correcte du trafic et un comportement de basculement sans perte.
Le bloc final de validation se concentre sur les outils opérationnels, incluant 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é portée à la scalabilité. Lors 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 des scénarios opérationnels typiques d’un réseau de fournisseur de services à l’échelle nationale.
Cette approche de test ne fournit pas seulement un ensemble de vérifications isolées, mais une compréhension globale du comportement du système dans des conditions réelles d’exploitation. Pour les projets à grande échelle, cela signifie que la solution passe par un cycle complet de validation avant 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 utilisés pour les déploiements à grande échelle sont également appliqués aux projets de plus petite taille. Ainsi, les opérateurs de toute taille bénéficient d’une solution ayant subi le même niveau de vérification.
Dans le prochain article, nous passerons aux tests de performance et analyserons les métriques de débit réel. 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 selon différents scénarios de déploiement.














