Auteur Sujet: Test du MAP-T et MAP-E en LAB  (Lu 2345 fois)

0 Membres et 1 Invité sur ce sujet

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 376
Test du MAP-T en LAB
« Réponse #12 le: 31 janvier 2024 à 03:47:32 »
La bataille fut rude, mais je l'ai eu !  :D

Au final c'est presque comme une debian normale, sauf qu'il faut bien connaître la syntaxe qui diffère, sans compter tout le travail préparatoire. J'ai dû aussi installer une interface graphique pour avoir le copier/coller fonctionnel car sans accès SSH (voir plus bas) c'était un poil relou de tout taper à la main...

Installation du repo : https://wiki.fd.io/view/VPP/Installing_VPP_binaries_from_packages puis :
apt install vpp vpp-plugin-dpdk vpp-plugin-core
Édition de /etc/vpp/startup.conf pour ajouter les identifiants des cartes physiques (faire un lshw) exemple chez moi  :
dpdk {
dev 0000:00:03.0 {
}
dev 0000:00:08.0
}

Bien penser à down les interfaces avant de démarrer VPP sinon il ne peut pas en prendre le contrôle (visible en faisant un systemctl status). Conséquence, elle disparaissent et l’hôte n'a plus de connectivité, à moins après coup de créer une "host-interface" qui, je pense, permet de lui redonner un accès (pas encore testé).

Entrée dans vpp avec vppctl. À partir de là on commence la conf proprement dite :
# vérifier le noms des interfaces
show interface

# définiton des adresses
set interface ip address GigabitEthernet0/3/0 192.168.1.164/24
set interface ip address GigabitEthernet0/8/0 2001:db8:940e::1/64
set interface ip address GigabitEthernet0/8/0 fe80::ba0:bab/128 # petite ref à orange ;)


# activation des interfaces
set interface state GigabitEthernet0/3/0 up
set interface state GigabitEthernet0/8/0 up

#ajout de la route par défaut (carte LAN)
ip route add 0.0.0.0/0 via 192.168.1.1 GigabitEthernet0/3/0

# ajout de chaque CE (un seul pour l'exemple) (carte CE)
ip route add 2001:db8:940e:4::/62 via fe80::a00:27ff:fe46:d036 GigabitEthernet0/8/0

#création du domaine
map add domain ip4-pfx 192.0.2.0/30 ip6-pfx 2001:db8:940e::/60 ip6-src 2001:db8:940e::1 ea-bits-len 2 psid-offset 0 psid-len 0

#activation du MAP-E sur les 2 interfaces (sinon ça marche pas), si on fait du MAP-T, il faut ajouter "map-t" après les noms d'interface
map interface GigabitEthernet0/8/0
map interface GigabitEthernet0/3/0

J'ajoute avec tout ça le provisionnement des CE par DHCPv6 comme pour MAP-T (via une autre VM). Ainsi que les routes sur le routeur principal.

Et en théorie ça doit marcher !

Ce n'est qu'un premier essai et tout n'est pas fonctionnel comme l'ipv6 (pas monté de vxlan par ex, je pourrais tester en filaire cela dit). Y'a aussi un peu de tunning à faire comme le fait que ça bouffe 2 Go de RAM à vide (même service arrêté, j'ai trouvé ça étonnant, il faut le désinstaller pour que ça cesse) et 100% du CPU en permanence, va falloir creuser un peu. Mais le plus important fonctionne et c'est le principal  :)
« Modifié: 31 janvier 2024 à 04:19:03 par renaud07 »

ppn_sd

  • Abonné RED by SFR fibre FttH
  • *
  • Messages: 137
  • FLG (28190)
Test du MAP-T en LAB
« Réponse #13 le: 31 janvier 2024 à 08:27:43 »
Merci pour les tests !

Y'a aussi un peu de tunning à faire comme le fait que ça bouffe 2 Go de RAM à vide (même service arrêté, j'ai trouvé ça étonnant, il faut le désinstaller pour que ça cesse) et 100% du CPU en permanence, va falloir creuser un peu.

Pour l'utilisation du CPU, c'est "normal" pour DPDK :
https://doc.dpdk.org/guides-22.11/prog_guide/power_man.html#empty-poll-api
https://s3-docs.fd.io/vpp/23.10/gettingstarted/troubleshooting/cpuusage.html#vpp-cpu-load

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 376
Test du MAP-T et MAP-E en LAB
« Réponse #14 le: 31 janvier 2024 à 18:33:56 »
Merci pour l'info, il me semblait bien avoir lu un truc là dessus. Mais je viens de trouver un paramètre qui permet de mettre en pause malgré le polling : https://fdio-vpp.readthedocs.io/en/latest/gettingstarted/users/configuring/startup.html#unix

Il faut rajouter poll-sleep-usec 100 (ou autre valeur suivant ce qu'on veut obtenir) dans la section unix { } de startup.conf Et magie, la conso CPU retombe à 1-2%. Il ne reste que la RAM, mais bon c'est pas gênant, ça ne consomme pas plus de watts qu'elle soit plus utilisée ou non.

J'ai alors fait un speedtest et le débit est vraiment bon, je ne vois pas de différence significative avec une connexion directe (entre 200-300 mbps, je suis un peu éloigné de mon AP) avec une conso CPU ridicule de 5%, là où Jool avec MAP-T prend bien 20-25%. Il faudrait que je compare, voir si VPP s'en sort mieux.

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 376
Test du MAP-T et MAP-E en LAB
« Réponse #15 le: 01 février 2024 à 00:41:09 »
J'essaie de créer un domaine MAP-T pour faire la comparaison avec Jool mais rien à faire, l'option n'est pas reconnue... J'ai cru que la syntaxe avait changée, mais j'ai vérifié et c'est pas le cas. Tous les arguments y compris tag et mtu qui ne sont pas indispensables, passent. Il doit y avoir un bug quelque part.

https://docs.fd.io/vpp/23.10/cli-reference/clis/clicmd_src_plugins_map.html#map-add-domain

EDIT : upgrade vers la dernière version en rc (24.06) et même soucis... Bizarre.
« Modifié: 01 février 2024 à 02:59:42 par renaud07 »

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 376
Test du MAP-T et MAP-E en LAB
« Réponse #16 le: 02 février 2024 à 02:37:02 »
Surprise ce soir, MAP-T s'est mis à fonctionner. L'argument ne sert en fait à rien (et a sans doute été supprimé) lors de l'ajout du domaine, le tout est de bien l'activer sur chaque interface. Mais j'ai l'impression que ça déconne un peu, des fois il n'est pas pris en compte et il faut le supprimer/recréer une seconde fois. C'est peut-être ce qui est arrivé.

J'ai donc fait un petit ST et le résultat est sans appel : environ 15% de CPU lors du transfert à 300 Mbps, moins consommateur que jool.

Par contre un truc bizarre, la conso totale ne rapporte pas la même valeur que le processus, mais genre 6% (sur htop). Faut que je vérifie pour jool, car je m'étais fié à la conso totale.

Pour la commande il suffit de remplacer ip6-src par la DMR au lieu de l'adresse du BR en MAP-E ce qui donne :
add domain ip4-pfx 192.0.2.0/30 ip6-pfx 2001:db8:9400::/60 ip6-src 4464:ff9b:ce::/64 ea-bits-len 2 psid-offset 0
Et petite astuce : si on ne veut pas se servir de la première v4 en .0 qui peut potentiellement générer des soucis avec certains systèmes, il ne faut pas attribuer le premier préfixe (ici un /62), ou plus laborieux, attribuer une règle à chaque CE avec une v4 en /32 et le /62 associé (mais plus pénible à maintenir), bien ajuster le ea-bits-len en conséquence (0 dans ce cas).

EDIT : Pour que l’hôte retrouve un accès au réseau :
# Hôte
ip link add name vpp1out type veth peer name vpp1host
ip link set dev vpp1out up
ip link set dev vpp1host up
ip addr add 10.10.1.1/24 dev vpp1host

# VPP
create host-interface name vpp1out
set int state host-vpp1out up
set int ip address host-vpp1out 10.10.1.2/24

# Hôte
ip route add default via 10.10.1.2

Ne pas oublier de rajouter la route sur le routeur principal (ou faire du NAT en sortie de VPP)
« Modifié: 06 février 2024 à 13:17:06 par renaud07 »

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 376
Test du MAP-T et MAP-E en LAB
« Réponse #17 le: 17 février 2024 à 16:25:06 »
Petite question python : j'essaie depuis hier de faire pondre à chatGPT un script pour calculer l'ipv4 public et les ports, sauf que je n'arrive à rien. J'ai fait une dizaine d'essais avec différents prompts, mais y'a toujours une erreur quelque part, de fonction non supportée ou de valeur incohérente, même en lui précisant la version de python. À chaque fois que je lui soumet sa propre erreur, une autre apparaît et ça n'en fini pas. La seule fois où j'ai eu un résultat, c'était totalement incohérent.

Mon niveau en dev étant très proche de 0, je suis bien incapable de déboguer ça tout seul. La seule chose qu'il me fait bien c'est d'avoir une belle ligne de commande avec les arguments à passer, ainsi qu'un joli code commenté, mais qui ne fonctionne pas  :P

Voici sa dernière proposition, car évidemment, le même prompt me ressort un code différent à chaque fois sinon c'est pas drôle...

Merci d'avance

Cochonou

  • Abonné Bbox fibre
  • *
  • Messages: 1 359
  • FTTH 2 Gb/s sur Saint-Maur-des-Fossés (94)
Test du MAP-T et MAP-E en LAB
« Réponse #18 le: 18 février 2024 à 10:52:24 »
En gros c'est ça qu'il faut implémenter ?
https://datatracker.ietf.org/doc/html/rfc7599#appendix-A


renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 376
Test du MAP-T et MAP-E en LAB
« Réponse #19 le: 18 février 2024 à 14:28:21 »
Exactement. Si ça à l'air plutôt simple en apparence...

Je voulais aussi rajouter l'IPv6 du CE, mais quand j'ai vu comment il me générait ça, j'ai laissé tomber cette partie.

J'ai retenté en lui donnant l'exemple directement, mais toujours pas.

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 376
Test du MAP-T et MAP-E en LAB
« Réponse #20 le: 19 février 2024 à 17:42:37 »
Après d'autres essais, je crois que je tiens un script plus fonctionnel, mais j'ai une erreur d'utilisation avec split(), qu n'est pas utilisé correctement, et j'ai beau regarder des exemples sur le net, je ne comprends pas comment corriger la chose sur le code. Et chatGPT me propose une correction qui ne fonctionne pas et que je trouve bizarre.

Je sens qu'il manque pas grand chose, mais y'a toujours un petit truc qui coince. Je n'ai pas vérifié les variables de calcul, c'est peut-être pas bon non plus, mais pour ça faudrait déjà que je puisse l'exécuter.

L'erreur en question :
File "mapports6.py", line 151, in <module>
    print("Ports disponibles :", calculate_available_ports(bmr["ipv4_prefix"], ipv4_address, psid))
  File "mapports6.py", line 90, in calculate_available_ports
    ipv4_suffix = ipv4_to_bin(ipv4_address)[32-p:]
  File "mapports6.py", line 39, in ipv4_to_bin
    octets = ipv4.split(".")
AttributeError: 'function' object has no attribute 'split'

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 092
  • Paris (75)
Test du MAP-T et MAP-E en LAB
« Réponse #21 le: 21 février 2024 à 23:50:56 »
chat-gpt pour coder ... mouais. c'est un LLM , un "compléteur" de texte, rien de plus.

ca marche en démo sur des exemples simples et triviaux pour attirer les financements et faire du médiatique et peur aux gens... sur du vrai code ce n'est pas la meme histoire.

En regardant rapido, ton fichier est plein de bugs. On peut tenter de les corriger pour qu'il ne plante plus mais ca ne garantira forcement pas le résultat

il vaut mieux peut-etre poser 'les formules en francais" et construire le code à partir de la  ?

sinon utiliser Gemini (le GPT de Google) et lui demander EN ANGLAIS:
"python code to calculate IPv6 MAP-T and MAP-E parameters"

la il te répond qu'il existe une lib python pour cela (https://github.com/ejordangottlieb/pyswmap) et il te donne un exemple:


from pyswmap import MapCalc

# Configure parameters
rule_v6 = "fd80::/48"  # IPv6 rule prefix
rule_v4 = "24.50.100.0/24"  # IPv4 rule prefix
port_value = 40000  # Layer-4 port

# Create MapCalc object
map_calc = MapCalc(rulev6=rule_v6, rulev4=rule_v4)

# Calculate PSID
psid = map_calc.gen_psid(port_value)

# Get other information
originating_prefix = map_calc.get_originating_prefix(port_value)
map_address = map_calc.get_map_address(port_value)

print(f"PSID: {psid}")
print(f"Originating IPv6 prefix: {originating_prefix}")
print(f"MAP address: {map_address}")

mais en regardant dans le repo, y'a plein d'exemples:
git clone https://github.com/ejordangottlieb/pyswmap
cd pyswmap/examples
tu as plein d'exemples la dedans.

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 376
Test du MAP-T et MAP-E en LAB
« Réponse #22 le: 22 février 2024 à 00:41:43 »
Mais quel abruti je suis... Faudrait me mettre des claques des fois.

J'ai trouvé ce projet en faisant mes recherches (que j'ai suggéré ici quelques jours avant), mais lorsque j'essayais de tirer quelque chose de ce c*n de chatGPT, tu crois que j'y ai pensé ? Pas une seule seconde.

Heureusement que t'es là pour me le rappeler  ;)



« Modifié: 22 février 2024 à 04:16:01 par renaud07 »

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 376
Test du MAP-T et MAP-E en LAB
« Réponse #23 le: 22 février 2024 à 02:13:15 »
Et ben franchement, il manque pas grand chose pour que ce soit nickel.

listmapaddresses.py qui calcule tous les préfixes, se suffit presque à lui-même. Juste à rajouter un petit grep derrière pour filtrer son préfixe délégué et on a déjà l'IP publique et le PSID (ce qui bien l'info importante pour une conf statique).

Le petit truc qui manque c'est l'affichage du ou des ranges de ports (comme le simulateur de cisco) et non l'ensemble. En plus dans le terminal, ça fait un affichage bizarre qui coupe les lignes, à moins de l'exporter dans un fichier.
« Modifié: 22 février 2024 à 04:10:05 par renaud07 »