Warning: Cannot modify header information - headers already sent by (output started at /var/www/new_netup_tv/htdocs/fr-FR/menu_struct.inc.php:151) in /var/www/new_netup_tv/htdocs/fr-FR/inc/constructor.inc.php on line 26
MultiFiles, le système pour la distribution de firmware via UDP multicast

MultiFiles

Un système pour distribution de fichier (Firmware) via UDP Multicast

Télécharger multifiles v0.5

Licence: GPLv2, GPLv3.

Principes de fonctionnement de MultiFiles

Le fichier à distribuer est envoyé de manière cyclique vers le réseau dans un flux UDP multicast vers une adresse multicast spécifiée (par défaut 224.2.2.4 port 2222). Pour recevoir le firmware Le client a besoin de joindre le groupe multicast en envoyant une requête IGMP et pour commencer à télécharger le fichier. Dès que le téléchargement est terminé, le client se déconnecte du groupe et vérifie l’intégrité du fichier. Si la vérification est réussie, le fichier est décompressé (le format est .tar.gz) et le script customup.sh est démarré qui est contenu dans l’archive qui vient d’être téléchargée. Le script met à jour les fichiers nécessaires et réalise d’autres actions nécessaires pour la mise à jour.

En utilisant le multicast cela permet de mettre à jour n’importe quel nombre de décodeur IP à la volée en utilisant un seul flux.

Le client ne fait pas de mise à jour si la version actuelle du firmaware est identique ou plus récente que celle distribuée dans le flux. Cependant, si l’option "forcer la mise à jour" est spécifiée sur le serveur, la mise à jour est toujours faite peu importe la version du logiciel.

Schéma Multifiles
Fig. 1. Un schéma du réseau avec multifiles

Caractristiques du flux

Le flux est constitué de paquets UDP avec l’entête au format suivant:

struct mulfiles_header{
    uint32_t message_type;
    uint32_t flags;
    uint32_t data_size;
    uint32_t sequence_no;
    uint32_t file_offset;
};

message_type peut avoir une ou deux valeurs:

#define MF_MTYPE_INFO 0x04030201
#define MF_MTYPE_DATA 0x04030202

Les paquets dans le type MF_MTYPE_INFO sont des paquets informationnels et contiennent des informations sur le fichier distribué, incluant les données suivantes:

struct mulfiles_message_info{
    uint32_t file_size;
    uint32_t fw_version;
    unsigned char md5sum[16];
    char filename[1024];
};

la taille du fichier, la version du firmware, le nom du fichier et la somme MD5 pour la vérification d’intégrité. Les paquets sont envoyés toutes les 2 secondes par défaut.

Les paquets du type MF_MTYPE_DATA contiennent le contenu du fichier distribué. L’entête inclut les informations d’offset des données contenues dans le paquet en respectant le début du fichier. Le client peut commencer le téléchargement du fichier à tout moment sans attendre le prochain cycle de démarrage. Cette logique permet le téléchargement de fichiers sans délais supplémentaires pour le début ou la fin du fichier.

La vitesse de transmission de données sur le réseau peut être réglée par les options de la ligne de commande de l’application serveur. Par défaut la vitesse est de 100 KOctets par seconde.

Caractéristiques de l’application serveur

Options de ligne de commande du serveur:

multifiles # ./mfsrv -h
Utilitaire de téléchargement du fichier multicast de NetUP (serveur). Copyright (c) 2001-2008 NetUP Inc.
www.netup.tv. Date de compilation: 3 Nov  2008 13:22:49
 Utilisez cet utilitaire à vos propres risques.
usage:
options
 [-i IP]          Multicast IP address to use. Default: 224.2.2.4
 [-p port]                UDP port to use. Default: 2222
 [-d]             Enable debug messages. Default: disabled
 [-f file]                Name of the file to send. Default: testfile.bin
 [-s speed]               Upload speed Kbytes/sec. Default: 100 Kbytes/sec
 [-t delay]               Prophylactic info messages delay, sec. Default: 2 sec
 [-u]             Setting force update flag. Default: force update flag not set
 [-a version]             Firmware version. Default: 0
 [-h]             This help

Un exemple de demarrage du serveur:

multifiles # ./mfsrv  -i 224.5.6.7 -p 1111 -f ./netup.tgz -s 100 -a 1104 -t 6
Using file:./netup.tgz file name:netup.tgz prophylactic_delay:6
Speed:102400 bytes/sec psleep: 13513
+ Sending file:netup.tgz sequence:1
o    Prophylactic info: 1068 bytes from 1068 send to socket:3
o    Prophylactic info: 1068 bytes from 1068 send to socket:3
o    Prophylactic info: 1068 bytes from 1068 send to socket:3
o    Prophylactic info: 1068 bytes from 1068 send to socket:3
o    Prophylactic info: 1068 bytes from 1068 send to socket:3
o    Prophylactic info: 1068 bytes from 1068 send to socket:3
o    Prophylactic info: 1068 bytes from 1068 send to socket:3
o    Prophylactic info: 1068 bytes from 1068 send to socket:3
o    File:netup.tgz successfully sent
+ Sending file:netup.tgz sequence:2

Comme on peut le voir dans l’exemple, le fichier netup.tgz est envoyé vers multicast group 224.5.6.7:1111 à une vitesse de 100 Koctets/s. La version du firmware est 1104.

Caractéristiques de l’application client

Options de ligne de commande du client:

multifiles # ./mfcln -h
Utilitaire de téléchargement du fichier multicast de NetUP (client). Copyright (c) 2001-2008 NetUP Inc.
www.netup.tv. Date de compilation: 3 Nov  2008 13:22:48
 Utilisez cet utilitaire à vos propres risques.
usage:
options
 [-i IP]          Multicast IP address to use. Default: 224.2.2.4
 [-p port]        UDP port to use. Default: 2222
 [-t socket wait timeout]       UDP socket timeout, sec. Default: 10 sec.
 [-d]             Enable debug messages. Default: disabled
 [-f file]        Name of the file to save. Default using filename coming from server
 [-s stat_file]   Name of the file to save stats in. Default: /tmp/mfstat.log
 [-a fw_version]  Current fw version. Download is started only if 
                  the received version is newer than current. Default: 0
 [-h]             This help

Un exemple du demarrage du client:

multifiles # ./mfcln -i 224.5.6.7 -p 1111 -a 1100
Waiting for incoming data ...
Info message received. sequence:9240 filename:netup.tgz outfilename:netup.tgz.9240 
size:5741931 bytes
Receiving data ...
Filling file to required 5741931 bytes, blocks size is:1048576
File filled. Size is:5741931 requested size is:5741931. Starting write into
First offset:1379
Prophylactic info message received. filename:netup.tgz offset:208380 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:615480 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:1022580 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:1431060 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:1838160 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:2245260 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:2653740 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:3060840 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:3467940 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:3875040 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:4283520 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:4690620 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:5097720 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:5506200 size:5741931 bytes 
force update:0 fw_version:1104
Prophylactic info message received. filename:netup.tgz offset:69000 size:5741931 bytes 
force update:0 fw_version:1104
File 'netup.tgz.9240' received. Checking ...
e7a646426d66b5df3318ba09f1ae33d2 - our file md5. size:5741931
e7a646426d66b5df3318ba09f1ae33d2 - received md5
MD5 check success
File 'netup.tgz.9240' checked. Success.

Comme on peut le voir dans l’exemple, le fichier netup.tgz est reçu à partir de multicast group 224.5.6.7:1111. La version actuelle du fichier est 1100, mais la version fournie par le serveur est 1104.

Création du Firmware

Contenu du répertoire de scripts:

multifiles # ls -al scripts/
total 16
drwxr-xr-x 4 root root   84 Oct 27 13:51 .
drwxr-xr-x 5 root root 4096 Oct 27 15:36 ..
-rwxr-xr-x 1 root root  115 Oct 27 13:51 createfw.sh
-rwxr-xr-x 1 root root  187 Oct 27 13:42 customup.sh
drwxr-xr-x 3 root root   35 Oct 27 13:51 firmware
-rwxr-xr-x 1 root root  889 Oct 27 13:39 update.sh

Le script createfw.sh est utilisé pour la création du firmware. Par exemple, le script est:

multifiles # cat scripts/createfw.sh
FWPATH="firmware"
FWNAME="mf_fw.tgz"

(cd $FWPATH; tar cvfz ../$FWNAME ./*)
echo "Firmware created. File: $FWNAME"

Comme on peut le voir, le script archive le contenu du dossier du firmware dans le fichier mf_fw.tgz. Ce fichier sera fourni via multicast comme décrit ci-dessus.

Directory scripts/firmware/ contient les fichiers necessaries pour la mise à jour et le script customup.sh qui realise les actions necessaries sur l’appareil client après téléchargement. Un simple exemple de tel script est donné ci-dessous:

multifiles # cat scripts/firmware/customup.sh
echo "Running custom upgrade shell script ... Please, wait"
echo "Copying new files ... "
cp stb_client/bin/stb_client /netup/stb_client/bin/stb_client

echo "Updating config files ... "

Comme on peut le voir, le script copie les nouveaux fichiers et, si nécessaire, met à jour les fichiers de configuration.

travailler avec le Firmware du Client

Exemple du script qui organise la réception et le traitement du firmaware sur l’appareil client (l’exemple est fourni pour un STB IP):

multifiles # cat scripts/update.sh
MFPATH="/mfupdater"
NEPATH="/netup"
DSTPATH=$MFPATH/dst
STATFILE="/tmp/mfstat.log"

# Show update splash screen
cat $MFPATH/updatesp.bmp > /dev/fb0 2>/dev/null

# get current ver
if [ -f $NEPATH/version ]; then
    export CURVER=`cat $NEPATH/version`
else
    export CURVER=0
fi


$MFPATH/mfcln -s $STATFILE -t 3 -i 224.5.6.7 -p 1111 -f $MFPATH/download.bin -a $CURVER

if [ $? -eq 0 ]; then
    echo "Updating software ... "

    # Create dst path
    mkdir $DSTPATH 2>/dev/null

    # unbzip received file into /netup
    cd $DSTPATH
    cat $MFPATH/download.bin | tar -xz

    # run custom script in received file
    cd $DSTPATH
    sh customup.sh

    # save new version
    if [ -f $STATFILE ]; then
        cat $STATFILE > $NEPATH/version
    fi

    # cleanup dst dir if required. You can do this in customup.sh

    echo "Update done. New fw version:"
    cat $NEPATH/version
fi

Comme on peut le voir à partir du code ci-dessus, le script réalise les étapes suivantes:

  • amorce la version du firmware actuelle. Les informations de version sont stockées dans /netup/version
  • Démarre le téléchargement du firmware à partir du groupe multicast
  • Si le fichier a été téléchargé avec succès, il le décompresse et lance le script customup.sh contenu dans l’archive. Le script pré-forme les actions nécessaires (copie, mise à jour de configuration, etc.)
  • Les données de la nouvelle version sont stockées dans le fichier /netup/version. La prochaine mise à jour sera faite si une version plus récente du firmware provient du serveur ou si l’option "forcer mise à jour" est active sur le serveur.

Exécutables

L’archive inclut des exécutables prêts pour les plateformes suivantes:

  • SH-4
  • Mipsel uclibc
  • ARM9
  • PPC
  • x86

Pour les fabricants de STB IP

Il est suggéré d'inclure l'application client (mfcln) dans le STB IP. À chaque démarrage de STB IP il est nécessaire de lancer l’application dans le but de vérifier la présence de flux multicast avec le firmware. La vérification ne prendra pas plus de 2 secondes, et si aucun flux multicast de firmware n’est trouvé ou si un firmware plus ancien est fourni, un démarrage ordinaire sans aucun changement se lance. Si une version nouvelle de firmware est obtenue, elle est installée et les prochains démarrages peuvent suivre un schéma différent fourni par le firmware installé. Cela permet que les STB IP juste installés soient automatiquement mis en fonctionnement en obtenant le firmware spécifique pour le réseau actuel.


Get Adobe Flash player