la freebox fait un choix ip full stack ou ou ip partage apres que le lip6 ai etait cree , je pense que votre manipulation fonctionne mais n'eest pas optimale . regarde plus bas le ipip6 est deja cree quil solicite le choix d'ip partage ou full
ou je me trompe
si vous ouvrez votre freebox sans devisser la vis sous letiquette vous avez acces a un connecteur uart
a priori 12 000 serial
sinon ya que du 5V sur ' luart'
a activer avec un vlan dev 41 ?
je vous presente la fonction FF TUN READ PARAMS :
il sont pas fouler mais ca suffit que des IF le jour ou un IF ne colle pas la fbx sendort
static void __ff_tun_read_params(void)
+{
+ union ff_tun_params tp;
+
+ if (!ff.tun_dev)
+ return;
+
+ if (!ff.wan_dev) {
+ __ff_tun_set_params(false, 0, NULL);
+ return;
+ }
+
+ memset(&tp, 0, sizeof (tp));
+
+ if (ff.tun_dev->type == ARPHRD_SIT) {
+ const struct ip_tunnel *tun = netdev_priv(ff.tun_dev);
+ const struct ip_tunnel_6rd_parm *ip6rd = &tun->ip6rd;
+
+ if (!ip6rd->prefixlen || ip6rd->prefixlen > 32) {
+ printk(KERN_DEBUG "ff: unsupported 6rd plen\n");
+ __ff_tun_set_params(false, 0, NULL);
+ return;
+ }
+
+ if (ff.tun_dev->mtu + sizeof (struct iphdr) >
+ ff.wan_dev->mtu) {
+ printk(KERN_DEBUG "ff: WAN mtu too "
+ "small for tunnel (%u => %u)\n",
+ ff.tun_dev->mtu, ff.wan_dev->mtu);
+ __ff_tun_set_params(false, 0, NULL);
+ return;
+ }
+
+ tp.sit.src = tun->parms.iph.saddr;
+ tp.sit.s6rd_prefix = ip6rd->prefix.s6_addr32[0];
+ tp.sit.s6rd_pmask = gen_netmask(ip6rd->prefixlen);
+ tp.sit.s6rd_plen = ip6rd->prefixlen;
+ __ff_tun_set_params(true, ff.tun_dev->mtu, &tp);
+ return;
+ }
+
+ if (ff.tun_dev->type == ARPHRD_TUNNEL6) {
+ const struct ip6_tnl *t = netdev_priv(ff.tun_dev);
+ const struct __ip6_tnl_parm *prm = &t->parms;
+ const struct __ip6_tnl_fmr *fmr;
+
+ if (ff.tun_dev->mtu + sizeof (struct ipv6hdr) >
+ ff.wan_dev->mtu) {
+ printk(KERN_DEBUG "ff: WAN mtu too "
+ "small for tunnel (%u => %u)\n",
+ ff.tun_dev->mtu, ff.wan_dev->mtu);
+ __ff_tun_set_params(false, 0, NULL);
+ return;
+ }
+
+ tp.map.src = prm->laddr;
+ tp.map.br = prm->raddr;
+
+ fmr = prm->fmrs;
+ if (!fmr) {
+ tp.map.ipv4_prefix = 0;
+ __ff_tun_set_params(true, ff.tun_dev->mtu, &tp);
+ return;
+ }
+
+ if (fmr->ip6_prefix_len < 32 ||
+ (fmr->ip6_prefix_len + 32 - fmr->ip4_prefix_len > 64)) {
+ printk(KERN_DEBUG "ff: unsupp MAP-E: eabits "
+ "span 32 bits\n");
+ __ff_tun_set_params(false, 0, NULL);
+ return;
+ }
+
+ if (fmr->offset) {
+ printk(KERN_DEBUG "ff: unsupp MAP-E: non zero "
+ "PSID offset\n");
+ __ff_tun_set_params(false, 0, NULL);
+ return;
+ }
+
+ tp.map.ipv4_prefix = fmr->ip4_prefix.s_addr;
+ tp.map.ipv4_pmask = gen_netmask(fmr->ip4_prefix_len);
+ tp.map.ipv4_plen = fmr->ip4_prefix_len;
+ tp.map.ipv6_plen = fmr->ip6_prefix_len;
+ memcpy(&tp.map.ipv6_prefix, &fmr->ip6_prefix, 8);
+
+ tp.map.ea_addr_mask = ~gen_netmask(fmr->ip4_prefix_len);
+ if (fmr->ea_len <= 32 - fmr->ip4_prefix_len) {
+ /* v4 prefix or full IP */
+ u32 addr_bits;
+
+ addr_bits = fmr->ip4_prefix_len + fmr->ea_len;
+ if (addr_bits != 32)
+ tp.map.ea_addr_mask &= gen_netmask(addr_bits);
+ tp.map.psid_len = 0;
+ } else {
+ u8 psid_len;
+
+ psid_len = fmr->ea_len - (32 - fmr->ip4_prefix_len);
+ tp.map.psid_len = psid_len;
+ tp.map.ea_port_mask = gen_netmask(psid_len);
+ }
+
+ tp.map.ea_lshift = 32 - (fmr->ip6_prefix_len - 32) -
+ fmr->ea_len;
+
+ __ff_tun_set_params(true, ff.tun_dev->mtu, &tp);
+ return;
+ }
+}