No subject


Fri Feb 15 00:40:57 CET 2008


On Sun, 27 Jan 2002, Tristan Leteurtre wrote:

Voici un petit resume de la config et des tests effectues.

Nous avons au niveau reseau un commutateur / routeur 6500 Cisco.
Sur ce commutateur nous avons un lien gigabyte vers un cisco 3548.
Sur ce cisco 3548 nous avons deux port 100 Mbit

le serveur vls se trouve sur un port de ce switch 3548 dans le VLAN 50
les clients se trouve sur un autre port de ce switch mais dans deux VLANS
21 et 50.

J'ai honteusement pompe dex extraits de 3 DVD.

J'ai d'abord lance le vls non patché avec 3 flux multicast.
le serveur vlcs multicast tournait sur la meme machine.

le switch 3548 broadcast sur tous ces ports ( pas bon ça )
le 6509 se prend 10% de CPU par flux dans le museau ( pas bon ça )

Par contre tout fonctionnait impec au niveau client qui etait configure
avec le channel serveur.
Le changement de chaine prenait environ quelques secondes 


Nous avons alors sauvagement patche le code du vls pour que celui
soit envoie une annonce igmp au debut de chaque flux multicast et
quitte le groupe multicast a la fin ( cd grospatch en attachement ; ce
patch contient egalement le patch sur le ttl de bozo ).

La qualite du patch n'est pas terrible terrible. En particulier il manque
un test sur l'adresse de destination. Pour l'instant toutes les adresses
sont considérées multicast.

On a de plus configure le 6509 en proxy cgmp pour que celui forwarde
les annonces IGMP aux switchs.

Le resultat est donc le suivant:

-Le reseau meme a 3 flux n'est pas tres charge . On a bien du 8Mbit par 
flux.
-Le switch 3548 ne broadcaste le flux que sur les ports concernes ( c'est 
bien )
-Le routeur commutateur 6509 a toujours sa charge CPU de 10% par flux et
ca c'est pas bien du tout car c'est quand meme notre commutateur de
backbone.

On va surement creuser cela car independement de videolan cette forte
charge sur le multicast nous inquiete un peu.


> On Thu, Jan 24, 2002, Eric DOUTRELEAU wrote in vls-devel:
> > Hello                                                                           
> >
> > Windows users were a bit jealous of linux users as the windows vlc              
> > client didn t work but i guess that s life :) 
> 
> 
>   D'après ce que j'ai pu lire, tu as fait des tests sur le réseau de
> l'INT... Cela nous intéresse d'avoir ton expérience pour comparer à nos
> résultats sur la réz de Centrale Paris.
> 
> Ces tests étaient-ils à grande échelle ? Combien de personnes ont
> essayé ? 
> 
>   Combien de flux avez vous envoyé, étaient-ce des flux type DVD (8
> Mbits) ? Votre réseau a-t-il bien supporté ?
> 
>   Concernant le client Windows, on va compiler d'ici quelques jours la
> version 0.2.92 pour que le client Windows puisse supporter le multicast.
> 
> Cordialement,
> 
> 

-- 
Eric Doutreleau
I.N.T			| Tel	: +33 (0) 160764687
9 rue Charles Fourier	| Fax	: +33 (0) 160764321
91011 Evry   France	| email	: Eric.Doutreleau at int-evry.fr




-- Attached file included as plaintext by Listar --
-- File: grospatch

diff -ur vls-0.3.1/src/modules/netchannel/netchannel.cpp mult/vls-0.3.1/src/modules/netchannel/netchannel.cpp
--- vls-0.3.1/src/modules/netchannel/netchannel.cpp	Thu Dec  6 16:32:24 2001
+++ mult/vls-0.3.1/src/modules/netchannel/netchannel.cpp	Fri Feb  1 18:19:17 2002
@@ -83,8 +83,12 @@
   C_String strDstHost = pApp->GetSetting(m_strName+".DstHost", "239.0.0.3");
   C_String strDstPort = pApp->GetSetting(m_strName+".DstPort", "1234");
 
+  C_String strTTL = pApp->GetSetting(m_strName+".TTL", "0");
+  unsigned char iTTL = strTTL.ToInt();
+
   m_pOutput = new C_NetOutput(strInterface,
-                              strSrcHost, strSrcPort, strDstHost, strDstPort);
+                              strSrcHost, strSrcPort, strDstHost, strDstPort,
+          iTTL);
 }
 
 
diff -ur vls-0.3.1/src/modules/netchannel/netoutput.cpp mult/vls-0.3.1/src/modules/netchannel/netoutput.cpp
--- vls-0.3.1/src/modules/netchannel/netoutput.cpp	Thu Dec  6 16:32:24 2001
+++ mult/vls-0.3.1/src/modules/netchannel/netoutput.cpp	Mon Feb  4 14:16:53 2002
@@ -39,6 +39,9 @@
 
 #include "netoutput.h"
 
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
 
 //******************************************************************************
 // C_NetOutput class
@@ -51,12 +54,15 @@
 //------------------------------------------------------------------------------
 C_NetOutput::C_NetOutput(const C_String& strInterface,
                          const C_String& strSrcHost, const C_String& strSrcPort,
-                         const C_String& strDstHost, const C_String& strDstPort)
+                         const C_String& strDstHost, const C_String& strDstPort,
+                         unsigned char iTTL)
                 : C_Output(TS_IN_ETHER), m_cSocketBuff(TS_IN_ETHER),
                   m_strInterface(strInterface),
                   m_strSrcHost(strSrcHost), m_strSrcPort(strSrcPort),
                   m_strDstHost(strDstHost), m_strDstPort(strDstPort)
 {
+  m_iTTL = iTTL;
+
   // Init the buffer
   for(int iIndex = 0; iIndex < TS_IN_ETHER; iIndex++)
     m_cSocketBuff.SetSlotSize(iIndex, TS_PACKET_LEN);
@@ -122,6 +128,22 @@
     }
 #endif
 
+    // Set the Time To Live value if != 0
+    if(m_iTTL)
+      m_cSocket.SetOption(IPPROTO_IP, IP_MULTICAST_TTL, &m_iTTL, sizeof(m_iTTL));
+
+	
+// if( IN_MULTICAST(inet_addr(m_strDstHost.GetString())))
+//	{
+// Ce serait bien d'avoir ici un test sur l'adresse multicast
+// qui fonctionne
+	struct ip_mreq imr;
+        imr.imr_interface.s_addr = INADDR_ANY;
+        imr.imr_multiaddr.s_addr = inet_addr(m_strDstHost.GetString());
+        m_cSocket.SetOption(IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&imr, sizeof(struct ip_mreq) );
+ //       }
+// fin du test
+
     // Bind it to the local address
     m_cSocket.Bind(m_strSrcHost, m_strSrcPort);
 
@@ -144,6 +166,15 @@
 {
   try
   {
+// if( IN_MULTICAST(inet_addr(m_strDstHost.GetString())))
+//	{
+// Ce serait bien d'avoir ici un test sur l'adresse multicast
+// qui fonctionne
+	struct ip_mreq imr;
+        imr.imr_interface.s_addr = INADDR_ANY;
+        imr.imr_multiaddr.s_addr = inet_addr(m_strDstHost.GetString());
+        m_cSocket.SetOption(IPPROTO_IP, IP_DROP_MEMBERSHIP, (char*)&imr, sizeof(struct ip_mreq) );
+//	}
     m_cSocket.Close();
   }
   catch(E_Exception e)
diff -ur vls-0.3.1/src/modules/netchannel/netoutput.h mult/vls-0.3.1/src/modules/netchannel/netoutput.h
--- vls-0.3.1/src/modules/netchannel/netoutput.h	Thu Dec  6 16:32:24 2001
+++ mult/vls-0.3.1/src/modules/netchannel/netoutput.h	Fri Feb  1 18:19:17 2002
@@ -43,7 +43,8 @@
  public:
   C_NetOutput(const C_String& strInterface,
               const C_String& strSrcHost, const C_String& strSrcPort,
-              const C_String& strDstHost, const C_String& strDstPort);
+              const C_String& strDstHost, const C_String& strDstPort,
+              unsigned char iTTL);
   virtual ~C_NetOutput();
 
   virtual void OnInit();
@@ -61,6 +62,8 @@
   C_String m_strSrcPort;
   C_String m_strDstHost;
   C_String m_strDstPort;
+  unsigned char m_iTTL;
+
   C_InetAddr m_cOutputInetAddr;
 #ifdef BUGGY_VLC
   byte m_ByteBuff[TS_PACKET_LEN * TS_IN_ETHER];

-- 
This is the vls-devel mailing-list, see http://www.videolan.org/vls-devel/
To unsubscribe, please read http://www.videolan.org/lists.html



More information about the vls-devel mailing list