container_of

June 2nd, 2009

container_of est une macro très utile et définie dans le kernel linux (./include/linux/kernel.h), qui permet de récupérer l’adresse d’une structure à partir d’un de ses membres:

/*!
* container_of - cast a member of a descriptor out to the containing descriptor
*
* @ptr:    the pointer to the member.
* @type:    the type of the container struct this is embedded in.
* @member:    the name of the member within the struct.
*
*/
#define container_of(ptr, type, member) ({			\
const typeof( ((type *)0)->member ) *__mptr = (ptr);	\
(type *)( (char *)__mptr - offsetof(type,member) );})

Elle prend en paramètres (comme décrit plus haut):

  • ptr: le pointeur que nous manipulons, membre de la structure instanciée dont nous voulons récupérer l’adresse
  • type: le type de la structure qui contient ce membre,
  • member: le nom du membre dans la déclaration de la structure.

La premiere ligne de la macro permet de déclarer un pointeur qui va contenir l’adresse du membre.

Ce pointeur va être correctement déclaré grâce au cast réalisé par:

typeof( ((type *)0)->member )*

(type *) 0 permet de déclarer un pointeur de structure de type (type) à l’adresse 0. On récupère alors le membre qui nous intéresse et plus précisément son type avec typeof, opérateur unaire comme sizeof défini par gcc (http://gcc.gnu.org/onlinedocs/gcc/Typeof.html).

La deuxième ligne peut se décomposer en deux parties:

Read more…

code , ,

freeradius et rlm_sqlcounter

April 15th, 2009

Cette note s’adresse aux utilisateurs de freeradius utilisant rlm_sqlcounter, et rajoute une précision concernant son utilisation.

Ce module est présent et activé par défaut dans freeradius depuis la version 1.1.0. Il permet de définir une durée maximale de connexion pour un utilisateur donné, en se basant sur les valeurs stockées dans la table radacct (Accounting) pour chaque session.

Read more…

dump , ,

freeradius 2.1.4 backport

April 9th, 2009

VRRP et Linux, un peu de bricolage…

April 8th, 2009

On reprend l’article précédent en mettant un peu les mains dans le camboui.

Un petit patch

Un patch (peut-être pas très propre ni très abouti) est disponible ici http://aandre.evolix.net/files/vrrpd/vrrpd-1.0-ebtables.diff. Il permet d’utiliser la méthode décrite précédemment tout en améliorant l’affichage du statut de vrrpd pendant son exécution.

Le script /etc/vrrpd/vrrp_switch sera exécuté lors des changements d’états avec des arguments supplémentaires:

  • l’IP virtuelle VRRP,
  • l’interface sur laquelle l’instance VRRP tourne,
  • la priorité actuelle de l’instance,
  • l’advertisement interval VRRP
  • la preemption VRRP

Read more…

vrrp , , , , ,

cinqgusdansungarage

March 10th, 2009

En réponse au commentaire de Christine Albanel à propos du collectif de citoyens “La Quadrature du Net” : « ce sont cinq gus dans un garage qui font des mails à la chaîne », un site http://www.cinqgusdansungarage.org/ a déjà ouvert ses portes, ridiculisant ses propos …

dump , , ,

Petit memo pour utiliser son téléphone portable en tant que modem sous linux…

March 6th, 2009

… et bénéficier de son forfait SFR illimythics 3G+ dans des endroits paumés où l’accès au nain ternet est difficile.

Il y a pas mal d’articles sur le sujet en fait, mais un petit memo perso fait pas de mal:

Read more…

dump, networking , , , , ,

VRRP et Linux

February 12th, 2009

Ou comment faire croire aux machines de notre sous-réseau qu’on a plusieurs adresses MAC sur une seule interface (et par la même occasion redonner un peu de vie ici …).

Il existe une implémentation libre du protocole : vrrpd, apparemment plus maintenue à ce jour. On lui préfèrera la version patchée par les contributeurs debian qui amène pas mal d’améliorations et de corrections de bug. Je passe la description détaillée du protocole, on notera que vrrpd respecte la rfc 2338, qui a été mise à jour par la rfc 3768 n’apportant en fait rien de spécial, à part en gros la suppression de l’authentification (tout en concervant la comptabilité avec l’ancienne rfc) et quelques clarifications.

Le principal problème sous linux quand on utilise un protocole de redondance utilisant une adresse MAC virtuelle est le fait qu’on ne puisse attribuer qu’une seule adresse mac par NIC, comme on peut le lire dans ce thread concernant justement VRRP.

Pour une unique instance de VRRP, le problème est donc contourné dans vrrpd de la manière suivante:
Read more…

vrrp , , , ,

apt gpg error

October 19th, 2007

Un peu dans la continuité de l’article précédent, vous venez de toucher à votre sources.list et lors de l’update vous tombez sur un message du genre “W: GPG error: http://reposit bidule Release: Les signatures suivantes n’ont pas pu être vérifiées car la clé publique n’est pas disponible : NO_PUBKEY XXXXXXXXX”.

Si comme moi ça ne vous arrive pas souvent et que vous vous ne rappellez jamais les commandes adéquats pour importer dans apt la clé nécessaire, notez dans un coin :

gpg --keyserver wwwkeys.eu.pgp.net --recv-keys XXXXXXXXX
gpg --armor --export XXXXXXXX | apt-key add -

Et hop.

debian , , , ,

Le PLUG dans les étoiles

March 27th, 2007

Plugien, Plugienne, oui toi heureux membre du merveilleux Provence Linux User Group, tu as maintenant ta planet ! Gloire et félicité !

dump, plugfr , ,

GPG error pendant une installation de Debian Etch

February 11th, 2007

Voulant installer une debian Etch sur le laptop prêté par mon lieu de stage, un thinkpad T30, je suis tombé sur une erreur bloquant complètement la procédure d’installation :

W: GPG error: ftp://ftp.fr.debian.org testing Release: The following<br />
signatures couldn't be verified because the public key is not<br />
available: NO_PUBKEY  XXXXXXXXXXXXXXXX

Ce bug est signalé chez debian et concerne apt version < =0.6.43. Les images d'installation Etch sont construites quotidiennement, et il s'avère que j'utilisais une image d'installation par le réseau vieille de plus d'un mois.

Ayant la flemme de télécharger une nouvelle image et recommencer l’installation je choisis d’accéder à une console (alt-F2) et de me chrooter dans l’environnement presque finalisé, afin de mettre à jour apt lui même.

# chroot /target<br />
# apt-get update<br />
[...] GPG ERROR blabla [...]<br />
# apt-get install apt<br />
[...]<br />

Apt s’est alors mis à jour, et j’ai pu terminer mon installation :-) .

Il est bien sûr conseillé d’utiliser une image récente lors d’installation de version testing afin d’éviter ce genre de désagrément.

debian , ,