Auteur Sujet: Remplacer sa Livebox par un routeur Ubiquiti Edgemax  (Lu 1540318 fois)

0 Membres et 3 Invités sur ce sujet

Je@nb

  • Abonné Orange Fibre
  • *
  • Messages: 144
  • Paris 8ème (75)
Remplacer sa Livebox par un routeur Ubiquiti Edgemax
« Réponse #2136 le: 09 février 2016 à 22:24:57 »
Bah dans le code de "lpf.c" ils mettent "Linux packet filter code" dans l'entête c'est pour ça que j'en parle ainsi.
C'est les LPF Socket quand tu fais des recherches google que j'utilisais.
C'est en effet ce qu'utilise tcpdump de tête.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 108
  • Paris (75)
Remplacer sa Livebox par un routeur Ubiquiti Edgemax
« Réponse #2137 le: 09 février 2016 à 22:55:17 »
- Le TOS est bien à ip.ip_tos = IPTOS_LOWDELAY (0x10); et on le voit bien dans la capture, le champs TOS a la bonne valeur.
le point important est la: si on peut changé et mettre la bonne valeur de DSCP pour que la couche VLAN map a CS6.

avec que IPTOS_LOWDELAY c'est pas bon, ca ne map pas a CS6 mais a 0. Pour avoir CS6 il faudrait mettre "110 000 xx".

cf table ici: http://www.dqnetworks.ie/toolsinfo.d/dscp.shtml

t'as pris les sources d'Ubnt ou directement chez ISC?

Je@nb

  • Abonné Orange Fibre
  • *
  • Messages: 144
  • Paris 8ème (75)
Remplacer sa Livebox par un routeur Ubiquiti Edgemax
« Réponse #2138 le: 09 février 2016 à 23:34:46 »
Logiquement ça devrait mettre le skb à 6 avec le TOS configuré (cf message de zoc page dernière) :
tos = 0x10
const __u8 ip_tos2prio[16]={0,0,0,0,2,2,2,2,6,6,6,4,4,4,4};
static inline char rt_tos2priority(u8 tos)
{
    return ip_tos2prio[(tos & 0x1E)>>1];
}

0x10 & 0x1E = 0x10
0x10 >> 1 = 0x08
ip_tos2prio[8] = 6

J'ai pris les sources sur isc.

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 108
  • Paris (75)
Remplacer sa Livebox par un routeur Ubiquiti Edgemax
« Réponse #2139 le: 10 février 2016 à 07:54:11 »
on commence a se mélanger les pinceaux, moi aussi, et  cela ne se passe au meme endroit...

ip_tos2prio c'est utilisé dans le routage et pour tc/qdisc ?

la on parle de raw sockets qui vont directement dans la couche d'en dessous, a savoir celle qui gere les vlans et donc la ou la table egress-qos entre en action ( dans net/8021q/vlan_dev.c). on sait en pratique qu'ici ca marche puisqu'en forcant tout le monde a 6 dans l'ERL ou n'importe quel linux ca donne bien des paquets DHCP avec la 802.1p a 6 (command egress-qos ou vconfig).

voila le code en question dans les source de la livebox:

le code qui définit la table "egress_priority_map"

int vlan_dev_set_egress_priority(const struct net_device *dev,
u32 skb_prio, u16 vlan_prio)
{
struct vlan_dev_info *vlan = vlan_dev_info(dev);
struct vlan_priority_tci_mapping *mp = NULL;
struct vlan_priority_tci_mapping *np;
u32 vlan_qos = (vlan_prio << 13) & 0xE000;

/* See if a priority mapping exists.. */
mp = vlan->egress_priority_map[skb_prio & 0xF];
while (mp) {
if (mp->priority == skb_prio) {
if (mp->vlan_qos && !vlan_qos)
vlan->nr_egress_mappings--;
else if (!mp->vlan_qos && vlan_qos)
vlan->nr_egress_mappings++;
mp->vlan_qos = vlan_qos;
return 0;
}
mp = mp->next;
}

/* Create a new mapping then. */
mp = vlan->egress_priority_map[skb_prio & 0xF];
np = kmalloc(sizeof(struct vlan_priority_tci_mapping), GFP_KERNEL);
if (!np)
return -ENOBUFS;

np->next = mp;
np->priority = skb_prio;
np->vlan_qos = vlan_qos;
vlan->egress_priority_map[skb_prio & 0xF] = np;
if (vlan_qos)
vlan->nr_egress_mappings++;
return 0;
}

le code par lequel les paquets sortent effectivement:
static inline u16
vlan_dev_get_egress_qos_mask(struct net_device *dev, struct sk_buff *skb)
{
struct vlan_priority_tci_mapping *mp;

mp = vlan_dev_info(dev)->egress_priority_map[(skb->priority & 0xF)];
while (mp) {
if (mp->priority == skb->priority) {
return mp->vlan_qos; /* This should already be shifted
      * to mask correctly with the
      * VLAN's TCI */
}
mp = mp->next;
}
return 0;
}

on remarque de suite: "skb_prio & 0xF". donc ca ne garde que les 4 bits de poids faibles pour le mapping.
la table fait donc 16 entrées max. 16 valeurs de skb_prio mappées sur 16 valeurs de 802.1p (3 bits de PCP+1 bit de DEI (ex CFI)).

il faut juste mettre le bon skb prio dans le code dhcp donc 0b1100 soit 0xC (12).
0x10 n'est pas bon, avec & 0xF ca donne 0.

tout ca reste encore confus tout de meme :) mais on avance.


kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 108
  • Paris (75)
Remplacer sa Livebox par un routeur Ubiquiti Edgemax
« Réponse #2140 le: 10 février 2016 à 07:56:52 »
pour ARP , le code de la livebox a un define: CONFIG_SAH_ARP_PRIORITY=6 ; suffit de lui suivre pour voir ou il est utilisé.

zoc

  • Abonné Orange Fibre
  • *
  • Messages: 4 301
  • Antibes (06) / Mercury (73)
Remplacer sa Livebox par un routeur Ubiquiti Edgemax
« Réponse #2141 le: 10 février 2016 à 08:13:02 »
pour ARP , le code de la livebox a un define: CONFIG_SAH_ARP_PRIORITY=6 ; suffit de lui suivre pour voir ou il est utilisé.
Je pense que mettre ARP en priorité 6 n'est pas notre principal problème de toute façon. @zommak ne l'a pas fait et tout fonctionne chez lui.

Dans le noyau, c'est là:
/*
 * Send an arp packet.
 */
void arp_xmit(struct sk_buff *skb)
{
skb->apFlowData.controlFlags |= IPQOS_HOQ_PACKET;
skb->priority = CONFIG_SAH_ARP_PRIORITY;
/* Send it off, maybe filter it using firewalling first.  */
NF_HOOK(NFPROTO_ARP, NF_ARP_OUT, skb, NULL, skb->dev, dev_queue_xmit);
}

Sinon, juste comme ça, vous me confirmez que le DHCP en priorité 0 ça ne fonctionne réellement pas ? Parce qu'on a un témoignagne ici : https://lafibre.info/remplacer-livebox/configuration-routeros-mikrotik-pour-livebox/ sur un routeur Mikrotik (c'est un noyau Linux 3.3.5) en DHCP qui fonctionne sans configurer les priorités 802.1p.

A moins que sur le MikroTik les requêtes DHCP sortent en priorité 6 par défaut...

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 108
  • Paris (75)
Remplacer sa Livebox par un routeur Ubiquiti Edgemax
« Réponse #2142 le: 10 février 2016 à 08:43:58 »
Hum sur OpenBSD ça marche mais les paquets DHCP ont la prio VLAN à 3

Donc faut'au moins 3 ou pas zéro ?...

Je referais un test cet après pour revalider que ca ne fonctionne pas avec l'erl sans egres-qos.

Je@nb

  • Abonné Orange Fibre
  • *
  • Messages: 144
  • Paris 8ème (75)
Remplacer sa Livebox par un routeur Ubiquiti Edgemax
« Réponse #2143 le: 10 février 2016 à 10:07:14 »
kgersen : toi tu es sur le code skb->prio vers la prio 802.1p.
Rien ici ne fait de mapping TOS/DCSP vers le skb.

Et dans le code de dhcp, il y a rien qui joue sur le skb (faudrait que je refasse un tour).

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 108
  • Paris (75)
Remplacer sa Livebox par un routeur Ubiquiti Edgemax
« Réponse #2144 le: 10 février 2016 à 14:44:42 »
bon on se prend le choux pour rien depuis 2 jours  :'(

j'ai revérifier tout, fait les parametres dhcp a la main (edition direct a la main de /var/run/dhclient_eth1_832.conf )

et ... ca marche avec l'ERL sans touché a la QoS :


(la limitation a 936 est du a mon PC de test).

sigh sur le temps perdu pour rien. ca m'apprendra a pas vérifier  :P

reste plusieurs points toutefois:

- IPv6
- la téléphonie
- trouver la config DHCP v4 propre au niveau de EdgeOS.

zoc

  • Abonné Orange Fibre
  • *
  • Messages: 4 301
  • Antibes (06) / Mercury (73)
Remplacer sa Livebox par un routeur Ubiquiti Edgemax
« Réponse #2145 le: 10 février 2016 à 15:08:48 »
;D Bonne nouvelle.

Pour IPv6 je pense qu'on va devoir faire le fichier de config à la main, encore faut-il que le client DHCP6-PD permette de configurer tous les paramètres nécessaires (on sait déjà que depuis le fichier de config EdgeOS c'est mort).

Pour la téléphonie, en ce qui me concerne il n'y aura pas de modifications, car ma téléphonie actuellement (asterisk + siproxd) ne passe pas par le VLAN 851 (il n'est même pas configuré sur mon ERL), mais par le lien "Internet".

Moi ce qui m'intéresse maintenant, c'est la TV: Apparemment on passe de 2 VLANS (pour TV et VOD) a un seul, ce qui veut donc dire que dans une configuration sans Livebox on n'a même plus besoin de bridge du tout, et du coup le CPU de l'ERL va dire merci (actuellement, à cause du bridge, j'ai un core qui monte à 25/30 % quand j'allume le décodeur TV à cause du bridge qui n'est pas offloadé).




BM92

  • Abonné Free fibre
  • *
  • Messages: 786
  • Rueil-Malmaison (92)
Remplacer sa Livebox par un routeur Ubiquiti Edgemax
« Réponse #2146 le: 10 février 2016 à 15:50:41 »
bon on se prend le choux pour rien depuis 2 jours  :'(

j'ai revérifier tout, fait les parametres dhcp a la main (edition direct a la main de /var/run/dhclient_eth1_832.conf )

et ... ca marche avec l'ERL sans touché a la QoS :

Tu est toujours sous OpenBSD ou l'ERL d'origine ?

kgersen

  • Modérateur
  • Abonné Bbox fibre
  • *
  • Messages: 9 108
  • Paris (75)
Remplacer sa Livebox par un routeur Ubiquiti Edgemax
« Réponse #2147 le: 10 février 2016 à 15:54:05 »
voila ma config actuel qui marche en IPv4:

il faut donc patcher le fichier perl pour l'option auth. je ne sais pas si tout est nécessaire dans le 'client-option "request' mais j'ai mis tout ce que la livebox demande.

le DHCPv6 ne marche pas mais le fichier /var/run/dhcp6c-eth1.832-pd.conf est généré par /opt/vyatta/sbin/dhcpv6-pd-client.pl. Je vais voir si y'a moyen d'injecter les "client-option" qui sont dans "dhcpv6-options" dans le .conf en modifiant le .pl. ca fait 15 ans que j'ai pas fait de Perl mais c'est comme le vélo il parait. :P