Compare commits

...
25 Commits
Author SHA1 Message Date
Simon Kelley dd88c17f15 Add status code containing "success" to all IA_TA and IA_NA
which have IAADDR options. This communicates zero information and
RFC3315 is unclear that it's needed, but at least one client seems
to require it.
2012-03-10 20:46:57 +00:00
Simon Kelley 8b37270410 Implement --dhcp-duid 2012-03-09 17:45:10 +00:00
Simon Kelley 760169fc43 Debian updates. 2012-03-09 14:27:49 +00:00
Simon Kelley 7023e38294 Docs changes for ra-names. 2012-03-09 12:05:49 +00:00
Simon Kelley a7cf58cc47 Merge branch 'ra-names' 2012-03-09 11:37:42 +00:00
Simon Kelley e25d1a2ea2 Fix prefix-map build code logic. 2012-03-08 13:24:17 +00:00
Simon Kelley 70969c1757 move #include for Solaris and Apple. 2012-03-07 20:46:28 +00:00
Simon Kelley 3803437dcc tidying 2012-03-07 20:39:40 +00:00
Simon Kelley eabc6dd76a Use getifaddrs on *BSD. 2012-03-07 20:28:20 +00:00
Simon Kelley e28d2e2b77 Merge branch 'getifaddrs' 2012-03-07 20:26:23 +00:00
Simon Kelley 96fafe2ed6 Fixed typos and tested. 2012-03-07 20:25:39 +00:00
Simon Kelley c81d390f84 Update man page to reflect the existance of DHCPv6 and RA. 2012-03-07 19:10:19 +00:00
Simon Kelley 08456c61f6 Use getifaddrs to find interfaces on *BSD 2012-03-07 19:08:11 +00:00
Simon Kelley bc26f9a03f Handle firewire and EUI-64 addresses in the SLAAC code. 2012-03-07 13:13:56 +00:00
Simon Kelley 6ffeff86be Teach emit_dbus_signal() about IPv6 DHCPv6 leases. 2012-03-07 10:32:35 +00:00
Simon Kelley f444cddbaf Don't waste time calculating EUI-64 when a lease doesn't have a name. 2012-03-07 10:15:57 +00:00
Simon Kelley d13191a46c Bump Debian version number. 2012-03-06 19:57:39 +00:00
Simon Kelley 801ca9a7b7 Add ra-names SLAAC-hostnames from DHCPv4 option. 2012-03-06 19:30:17 +00:00
Simon Kelley df66e341de Update polish translation. 2012-03-04 20:04:22 +00:00
Simon Kelley 71ee7ee254 Update French translation. 2012-03-03 18:06:49 +00:00
Simon Kelley a156cae901 Typos in man page. 2012-03-02 21:10:39 +00:00
Simon Kelley 22b135a116 Fix paretheses in ADD_RDLEN - it always returned 1 before. 2012-03-01 19:54:50 +00:00
Simon Kelley 0f08983d85 Be more picly about the MAC address we use for DUID-creation. 2012-03-01 13:43:39 +00:00
Simon Kelley e3e86343fc Fix DUID generation with HAVE_BROKEN_RTC. 2012-03-01 10:35:34 +00:00
Simon Kelley 7b6dd880f7 Fix socklen_t/size_t confusion in radv.c 2012-03-01 10:26:16 +00:00
19 changed files with 768 additions and 365 deletions

No files matched your search

+17 -1
View File
@@ -1,3 +1,15 @@
version 2.61
Re-write interface discovery code on *BSD to use
getifaddrs. This is more portable, more straightforward,
and allows us to find the prefix length for IPv6
addresses.
Add ra-names DHCPv6 keyword which adds AAAA records
for dual-stack hosts which get IPv6 addresses via SLAAC.
Add --dhcp-duid to allow DUID-EN uids to be used.
version 2.60
Fix compilation problem in Mac OS X Lion. Thanks to Olaf
Flebbe for the patch.
@@ -75,8 +87,12 @@ version 2.60
could result in wrong answers when DNS packets arrive
via an interface other than the expected one. Thanks to
Lorenzo Milesi and John Hanks for spotting this one.
Update French translation. Thanks to Gildas Le Nadan.
Update Polish translation. Thanks to Jan Psota.
version 2.59
Fix regression in 2.58 which caused failure to start up
with some combinations of dnsmasq config and IPv6 kernel
+8
View File
@@ -1,3 +1,11 @@
dnsmasq (2.61-1) unstable; urgency=low
* New upstream.
* Provide "dump-stats" initscript method. (closes: #654656)
* Add (empty) build-indep and build-arch rules targets.
-- Simon Kelley <simon@thekelleys.org.uk> Tue, 6 Mar 2012 19:45:43 +0000
dnsmasq (2.60-1) unstable; urgency=low
* New upstream.
Vendored
+4 -1
View File
@@ -256,8 +256,11 @@ case "$1" in
*) log_success_msg "(unknown)" ; exit 4 ;;
esac
;;
dump-stats)
kill -s USR1 `cat /var/run/dnsmasq/$NAME.pid`
;;
*)
echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload|status}" >&2
echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload|dump-stats|status}" >&2
exit 3
;;
esac
+3
View File
@@ -184,7 +184,10 @@ endef
# Below here is fairly generic really
binary: binary-arch binary-indep
build:
build-arch:
build-indep:
checkroot:
test root = "`whoami`"
+9
View File
@@ -164,6 +164,15 @@
# Do Router Advertisements, BUT NOT DHCP for this subnet.
#dhcp-range=1234::, ra-only
# Do Router Advertisements, BUT NOT DHCP for this subnet, also try and
# add names to the DNS for the IPv6 address of SLAAC-configured dual-stack
# hosts. Use the DHCPv4 lease to derive the name, network segment and
# MAC address and assume that the host will also have an
# IPv6 address calculated using the SLAAC alogrithm.
# This will generate an erroneous AAAA record if a host is using privacy
# extensions or does not support IPv6. Use with care.
#dhcp-range=1234::, ra-names
# Do Router Advertisements, BUT NOT DHCP for this subnet.
# Set the lifetime to 46 hours. (Note: minimum lifetime is 2 hours.)
#dhcp-range=1234::, ra-only, 48h
+25 -4
View File
@@ -23,7 +23,7 @@ options. It includes a secure, read-only,
TFTP server to allow net/PXE boot of DHCP hosts and also supports BOOTP.
.PP
Dnsmasq
supports IPv6 for DNS and TFTP, but not DHCP.
supports IPv6 for all functions and a minimal router-advertisemnet daemon.
.SH OPTIONS
Note that in general missing parameters are allowed and switch off
functions, for instance "--pid-file" disables writing a PID file. On
@@ -556,7 +556,18 @@ the keyword
which tells dnsmasq to offer Router Advertisement only on this subnet,
and not DHCP. This applies to IPv6 only, see
.B enable-ra
for details.
for details. Instead, the keyword
.B ra-names
may be used. This does the same at ra-only, but also enables a mode
which gives DNS names to dual-stack hosts which do SLAAC for
IPv6. Dnsmasq uses the hosts IPv4 lease to derive the name, network
segment and MAC address and assumes that the host will also have an
IPv6 address calculated using the SLAAC alogrithm, on the same network
segment. An AAAA record is added to the DNS for this IPv6
address. Note that this is only happens for directly-connected
networks, (not one doing DHCP via a relay) and it will generate an
erroneous AAAA record if a host is using privacy extensions or does
not support IPv6. Use with care.
The interface:<interface name> section is not normally used. See the
NOTES section for details of this.
@@ -595,7 +606,7 @@ A single
.B dhcp-host
may contain an IPv4 address or an IPv6 address, or both. IPv6 addresses must be bracketed by square brackets thus:
.B --dhcp-host=laptop,[1234::56]
Note that in IPv6 DHCP, the hardware address is not normally available, so a client must be identified by client-id (called client DUID) in IPv6-land) or hostname.
Note that in IPv6 DHCP, the hardware address is not normally available, so a client must be identified by client-id (called client DUID in IPv6-land) or hostname.
The special option id:* means "ignore any client-id
and use MAC addresses only." This is useful when a client presents a client-id sometimes
@@ -1031,6 +1042,16 @@ the tags used to determine them.
.B \-l, --dhcp-leasefile=<path>
Use the specified file to store DHCP lease information.
.TP
.B --dhcp-duid=<enterprise-id>,<uid>
(IPv6 only) Specify the server persistent UID which the DHCPv6 server
will use. This option is not normally required as dnsmasq creates a
DUID automatically when it is first needed. When given, this option
provides dnsmasq the data required to create a DUID-EN type DUID. Note
that once set, the DUID is stored in the lease database, so to change between DUID-EN and
automatically created DUIDs or vice-versa, the lease database must be
re-intialised. The enterprise-id is assigned by IANA, and the uid is a
string of hex octets unique to a particular device.
.TP
.B \-6 --dhcp-script=<path>
Whenever a new DHCP lease is created, or an old one destroyed, the
executable specified by this option is run. <path>
@@ -1257,7 +1278,7 @@ dnsmasq will advertise a prefix for each dhcp-range, with default
router and recursive DNS server as the relevant link-local address on
the machine running dnsmasq. The "managed address" bits are set,
except for a dhcp-range which is marked as "ra-only", in which case RA
is provided by no DHCPv6 service and the managed address bits are
is provided but no DHCPv6 service and the managed address bits are
cleared.
.B enable-ra
enables router advertisement for prefixes where dnsmasq is doing
+219 -87
View File
@@ -579,7 +579,9 @@ avec le support conntrack, le noyau doit également inclure conntrack et être
configuré pour cela. Cette option ne peut pas être combinée avec
--query-port.
.TP
.B \-F, --dhcp-range=[interface:<interface>,][tag:<label>[,tag:<label>],][set:<label],]<adresse de début>,<adresse de fin>[,<masque de réseau>[,<broadcast>]][,<durée de bail>]
.B \-F, --dhcp-range=[interface:<interface>,][tag:<label>[,tag:<label>],][set:<label>],]<adresse de début>,<adresse de fin>[,<masque de réseau>[,<broadcast>]][,<durée de bail>]
.TP
.B \-F, --dhcp-range=[interface:<interface>,][tag:<label>[,tag:<label>],][set:<label>],]<addresse IPv6 de début>,<adresse IPv6 de fin>[,<longueur de préfixe>][,<durée de bail>]
Active le serveur DHCP. Les adresses seront données dans la plage comprise entre
<adresse de début> et <adresse de fin> et à partir des adresses définies
statiquement dans l'option
@@ -604,6 +606,14 @@ est toujours optionnelle.
Il est toujours possible d'avoir plus d'une plage DHCP pour un même
sous-réseau.
Pour IPv6, les paramètres sont légèrement différents : au lieu d'un masque de
réseau et d'une adresse de broadcast, il existe une longueur de préfixe
optionnelle. Si elle est omise, la valeur par défaut est 64. À la différence
d'IPv4, la longueur de préfixe n'est pas automatiquement déduite de la
configuration de l'interface. La taille minimale pour la longueur de préfixe
est 64.
L'identifiant de label optionnel
.B set:<label>
fournie une étiquette alphanumérique qui identifie ce réseau, afin de permettre
@@ -627,7 +637,15 @@ spécifié. (voir
.B pxe-prompt
et
.B pxe-service
pour plus de détails).
pour plus de détails, s'applique à IPv4 seulement).
L'adresse de fin peut être remplacée par le mot-clef
.B ra-only
qui indique à dnsmasq de n'effectuer que des annonces de routeur (Router
Advertisement, RA) sur ce sous-réseau, et de ne pas faire de DHCP. Ceci
s'applique uniquement à IPv6, voir
.B enable-ra
pour plus de détails.
La section interface:<nom d'interface> n'est normalement pas utilisée. Se
référer aux indications de la section NOTES pour plus de détail à ce sujet.
@@ -663,6 +681,15 @@ spécifier l'identifiant client sous la forme d'une chaîne de caractères, comm
ceci :
.B --dhcp-host=id:identifiantclientsousformedechaine,.....
Un seul
.B dhcp-host
peut contenir une adresse IPv4, une adresse IPv6, ou les deux en même temps.
Les adresses IPv6 doivent-être mises entre crochets comme suit :
.B --dhcp-host=laptop,[1234::56]
A noter que pour le DHCP IPv6, l'adresse matérielle n'est en principe pas
disponible, aussi un client doit-être identifié par un identifiant de client
(appellé "DUID client") ou un nom d'hôte.
L'option spéciale id:* signifie : "ignorer tout identifiant client et n'utiliser
que l'adresse matérielle". Cela est utile lorsqu'un client présente un
identifiant client mais pas les autres.
@@ -709,7 +736,7 @@ ARP en les précédant du type ARP (en Hexadécimal) et de "-". Ainsi
coïncidera uniquement avec des adresses matérielles Token-Ring, puisque le type
ARP pour une adresse Token-Ring est 6.
Un cas spécial correspond à l'inclusion d'une ou plusieurs adresses
Un cas spécial, pour IPv4, correspond à l'inclusion d'une ou plusieurs adresses
matérielles, c-à-d :
.B --dhcp-host=11:22:33:44:55:66,12:34:56:78:90:12,192.168.0.2.
Cela permet à une adresse IP d'être associé à plusieurs adresses
@@ -750,22 +777,22 @@ une adresse IP sous la forme de 4 chiffres séparés par des points. Lorsque lu
par Dnsmasq, ces lignes ont exactement le même effet que l'option
.B --dhcp-host
contenant les mêmes informations. /etc/ethers est relu à la réception d'un
signal SIGHUP par Dnsmasq.
signal SIGHUP par Dnsmasq. Les adresses IPv6 ne sont PAS lues dans /etc/ethers.
.TP
.B \-O, --dhcp-option=[tag:<label>,[tag:<label>]][encap:<option>,][vi-encap:<entreprise>,][vendor:[<classe_vendeur>],][<option>|option:<nom d'option>],[<valeur>[,<valeur>]]
.B \-O, --dhcp-option=[tag:<label>,[tag:<label>]][encap:<option>,][vi-encap:<entreprise>,][vendor:[<classe_vendeur>],][<option>|option:<nom d'option>|option6:<option>|option6:<nom d'option>],[<valeur>[,<valeur>]]
Spécifie des options différentes ou supplémentaires pour des clients DHCP. Par
défaut, Dnsmasq envoie un ensemble standard d'options aux clients DHCP : le
masque de réseau et l'adresse de broadcast sont les mêmes que pour l'hôte
sur lequel tourne Dnsmasq, et le serveur DNS ainsi que la route par défaut
prennent comme valeur l'adresse de la machine sur laquelle tourne Dnsmasq. Si
une option de nom de domaine a été définie, son contenu est transmis. Cette
option de configuration permet de changer toutes ces valeurs par défaut, ou de
spécifier d'autres options. L'option DHCP à transmettre peut être fournie sous
forme d'un nombre décimal ou sous la forme "option:<nom d'option>". Les nombres
correspondants aux options sont définis dans la RFC2132 et suivants. Les noms
d'options connus par Dnsmasq peuvent être obtenus via "Dnsmasq --help dhcp".
Par exemple, pour définir la route par défaut à 192.168.4.4, il est possible de
faire
prennent comme valeur l'adresse de la machine sur laquelle tourne Dnsmasq.
(Des règles équivalentes s'appliquent en IPv6). Si une option de nom de domaine
a été définie, son contenu est transmis. Cette option de configuration permet
de changer toutes ces valeurs par défaut, ou de spécifier d'autres options.
L'option DHCP à transmettre peut être fournie sous forme d'un nombre décimal
ou sous la forme "option:<nom d'option>". Les nombres correspondants aux options
sont définis dans la RFC2132 et suivants. Les noms d'options connus par Dnsmasq
peuvent être obtenus via "Dnsmasq --help dhcp". Par exemple, pour définir la
route par défaut à 192.168.4.4, il est possible de faire
.B --dhcp-option=3,192.168.4.4
ou
.B --dhcp-option = option:router, 192.168.4.4
@@ -788,6 +815,13 @@ de l'option 120 sont traités conforméments à la RFC 3361. Les adresses IP sou
forme de 4 chiffres séparés par des points suivies par une barre montante "/",
puis une taille de masque sont encodés conforméments à la RFC 3442.
Les options IPv6 sont fournies en utilisant le mot-clef
.B option6:
suivi par le numéro d'option ou le nom d'option. L'espace de nommage des options
IPv6 est disjint de l'espace de nommage des options IPv4. Les adresses IPv6
en option doivent être entourées de crochets, comme par exemple :
.B --dhcp-option=option6:ntp-server,[1234::56]
Attention : aucun test n'étant fait pour vérifier que des données d'un type
adéquat sont envoyées pour un numéro d'option donné, il est tout à fait possible
de persuader Dnsmasq de générer des paquets DHCP illégaux par une utilisation
@@ -806,8 +840,8 @@ d'une chaîne de caractères comme nom de serveur TFTP, il est nécessaire de fa
comme suit :
.B --dhcp-option=66,"1.2.3.4"
Les options encapsulées de classes de vendeurs peuvent-être aussi spécifiées en
utilisant
Les options encapsulées de classes de vendeurs peuvent-être aussi spécifiées
(pour IPv4 seulement) en utilisant
.B --dhcp-option
: par exemple
.B --dhcp-option=vendor:PXEClient,1,0.0.0.0
@@ -823,7 +857,7 @@ par le client. Il est possible d'omettre complètement une classe de vendeur :
.B --dhcp-option=vendor:,1,0.0.0.0
Dans ce cas l'option encapsulée est toujours envoyée.
Les options peuvent-être encapsulées au sein d'autres options :
En IPv4, les options peuvent-être encapsulées au sein d'autres options :
par exemple
.B --dhcp-option=encap:175, 190, "iscsi-client0"
enverra l'option 175, au sein de laquelle se trouve l'option 190.
@@ -836,7 +870,8 @@ identifiant le vendeur" ("Vendor-Identifying Vendor Options") telle que
décrite dans le RFC3925. Celles-ci sont spécifiées comme suit :
.B --dhcp-option=vi-encap:2, 10, "text"
Le numéro dans la section vi-encap: est le numéro IANA de l'entreprise servant
à identifier cette option.
à identifier cette option. Cette forme d'encapsulation est également supportée
en IPv6.
L'adresse 0.0.0.0 n'est pas traitée de manière particulière lorsque fournie dans
une option encapsulée.
@@ -849,8 +884,8 @@ dans la liste de paramêtres requis. Cela est parfois nécessaire, par exemple l
de la fourniture d'options à PXELinux.
.TP
.B --dhcp-no-override
Désactive la réutilisation des champs DHCP nom de serveur et nom de
fichier comme espace supplémentaire pour les options. Si cela est
(IPv4 seulement) Désactive la réutilisation des champs DHCP nom de serveur et
nom de fichier comme espace supplémentaire pour les options. Si cela est
possible, dnsmasq déplace les informations sur le serveur de démarrage
et le nom de fichier (fournis par 'dhcp-boot') en dehors des champs
dédiés à cet usage dans les options DHCP. Cet espace supplémentaire est
@@ -859,7 +894,8 @@ quelques rares cas, perturber des clients vieux ou défectueux. Cette
option force le comportement à l'utilisation des valeurs "simples et sûres"
afin d'éviter des problèmes dans de tels cas.
.TP
.B \-U, --dhcp-vendorclass=set:<label>,<classe de vendeur>
.B \-U, --dhcp-vendorclass=set:<label>,[enterprise:<numéro IANA d'enterprise>,]<classe de vendeur>
Associe une chaîne de classe de vendeur à un label. La plupart
des clients DHCP fournissent une "classe de vendeur" ("vendor class") qui
représente, d'une certaine façon, le type d'hôte. Cette option associe des
@@ -875,6 +911,11 @@ en temps que sous-chaîne de caractères au sein de la classe de vendeur fournie
par le client, de façon à permettre la recherche d'un sous-ensemble de la chaîne
de caractères ("fuzzy matching"). Le préfixe set: est optionnel mais autorisé
afin de conserver une certaine homogénéité.
Notez qu'en IPv6 (et seulement en IPv6), les noms de classes de vendeurs
sont dans un espace de nom associé au numéro attribué à l'entreprise par
l'IANA. Ce numéro est fourni par le biais du mot-clef enterprise: et seules
les classes de vendeurs associées au numéro spécifié seront cherchées.
.TP
.B \-j, --dhcp-userclass=set:<label>,<classe utilisateur>
Associe une chaîne de classe d'utilisateur à un label (effectue la
@@ -887,7 +928,7 @@ d'impression différent pour les hôtes de la classe "comptes" et ceux de la
classe "ingénierie".
.TP
.B \-4, --dhcp-mac=set:<label>,<adresse MAC>
Associe une adresse matérielle (MAC) à un label. L'adresse
(IPv4 uniquement) Associe une adresse matérielle (MAC) à un label. L'adresse
matérielle peut inclure des jokers. Par exemple
.B --dhcp-mac=set:3com,01:34:23:*:*:*
permet de définir le label "3com" pour n'importe quel hôte dont l'adresse
@@ -901,16 +942,19 @@ chaîne de valeurs hexadécimales séparées par des ":", mais il est également
possible qu'elle le soit sous la forme d'une simple chaîne de caractères. Si
l'identifiant de circuit ou d'agent correspond exactement à celui fourni par le
relais DHCP, alors le label est apposé.
.B dhcp-remoteid
est supporté en IPv6 (mais non dhcp-circuitid).
.TP
.B --dhcp-subscrid=set:<label>,<identifiant d'abonné>
Associe des options de relais DHCP issues de la RFC3993 à des labels.
(IPv4 et IPv6) Associe des options de relais DHCP issues de la RFC3993 à des
labels.
.TP
.B --dhcp-proxy[=<adresse ip>]......
Un agent relai DHCP normal est uniquement utilisé pour faire suivre les
éléments initiaux de l'interaction avec le serveur DHCP. Une fois que le
client est configuré, il communique directement avec le serveur. Cela n'est pas
souhaitable si le relais rajoute des informations supplémentaires aux paquets
DHCP, telles que celles utilisées dans
(IPv4 seulement) Un agent relai DHCP normal est uniquement utilisé pour faire
suivre les éléments initiaux de l'interaction avec le serveur DHCP. Une fois
que le client est configuré, il communique directement avec le serveur. Cela
n'est pas souhaitable si le relais rajoute des informations supplémentaires
aux paquets DHCP, telles que celles utilisées dans
.B dhcp-circuitid
et
.B dhcp-remoteid.
@@ -973,26 +1017,28 @@ configuration dhcp-host de Dnsmasq, ainsi que le contenu des fichiers /etc/hosts
et /etc/ethers.
.TP
.B --dhcp-generate-names=tag:<label>[,tag:<label>]
Générer un nom pour les clients DHCP qui autrement n'en aurait pas, en
utilisant l'adresse MAC sous sa forme hexadécimale, séparée par des tirets.
(IPv4 seulement) Générer un nom pour les clients DHCP qui autrement n'en aurait
pas, en utilisant l'adresse MAC sous sa forme hexadécimale, séparée par des
tirets.
Noter que si un hôte fourni un nom, celui-ci sera utilisé de préférence au nom
autogénéré, à moins que
.B --dhcp-ignore-names
ne soit positionné.
.TP
.B --dhcp-broadcast=[tag:<label>[,tag:<label>]]
Lorsque tous les labels fournis dans l'option sont présents, toujours utiliser
le broadcast pour communiquer avec l'hôte lorsque celui-ci n'est
pas configuré. Il est possible de ne spécifier aucun label, auquel cas cette
option s'applique inconditionnellement. La plupart des clients DHCP nécessitant une réponse par le biais
d'un broadcast activent une option dans leur requête, ce qui fait que cela
se fait automatiquement, mais ce n'est pas la cas de certains vieux clients BOOTP.
(IPv4 seulement) Lorsque tous les labels fournis dans l'option sont présents,
toujours utiliser le broadcast pour communiquer avec l'hôte lorsque celui-ci
n'est pas configuré. Il est possible de ne spécifier aucun label, auquel cas
cette option s'applique inconditionnellement. La plupart des clients DHCP
nécessitant une réponse par le biais d'un broadcast activent une option dans
leur requête, ce qui fait que cela se fait automatiquement, mais ce n'est pas
le cas de certains vieux clients BOOTP.
.TP
.B \-M, --dhcp-boot=[tag:<label>,]<nom de fichier>,[<nom de serveur>[,<adresse de serveur>|<nom du serveur tftp>]]
Spécifie les options BOOTP devant être retournées par le serveur DHCP. Le nom de
serveur ainsi que l'adresse sont optionnels : s'ils ne sont pas fournis, le nom
est laissé vide et l'adresse fournie est celle de la machine sur laquelle
s'exécute Dnsmasq. Si Dnsmasq founit un service TFTP (voir
(IPv4 seulement) Spécifie les options BOOTP devant être retournées par le
serveur DHCP. Le nom de serveur ainsi que l'adresse sont optionnels : s'ils
ne sont pas fournis, le nom est laissé vide et l'adresse fournie est celle de
la machine sur laquelle s'exécute Dnsmasq. Si Dnsmasq founit un service TFTP (voir
.B --enable-tftp
), alors seul un nom de fichier est requis ici pour permettre un démarrage par
le réseau.
@@ -1018,7 +1064,7 @@ Veuillez noter que dans ce mode séquentiel, les clients qui laissent expirer
leur bail ont beaucoup plus de chance de voir leur adresse IP changer, aussi
cette option ne devrait pas être utilisée dans un cas général.
.TP
.B --pxe-service=[tag:<label>,]<CSA>,<entrée de menu>[,<nom de fichier>|<type de service de démarrage>][,<adresse de serveur>]
.B --pxe-service=[tag:<label>,]<CSA>,<entrée de menu>[,<nom de fichier>|<type de service de démarrage>][,<adresse de serveur>|<nom de serveur>]
La plupart des ROMS de démarrage PXE ne permettent au système PXE que la simple
obtention d'une adresse IP, le téléchargement du fichier spécifié dans
.B dhcp-boot
@@ -1036,17 +1082,20 @@ client PXE qu'il faut télécharger ce fichier via TFTP, soit depuis ce serveur
(l'option
.B enable-tftp
doit être spécifiée pour que cela marche), soit depuis un autre serveur TFTP
si une adresse de serveur est fournie.
si une adresse ou un nom de serveur est fournie.
Veuillez noter que le suffixe de "couche" (en principe ".0") est fourni par PXE
et ne doit pas être rajouté au nom de fichier. Si une valeur numérique entière
est fournir pour le type de démarrage, en remplacement du nom de fichier, le
client PXE devra chercher un service de démarrage de ce type sur le réseau.
Cette recherche peut être faite via broadcast ou directement auprès d'un
serveur si son adresse IP est fournie dans l'option.
serveur si son adresse IP ou son nom sont fournis dans l'option.
Si aucun nom de fichier n'est donné ni aucune valeur de type de service de
démarrage n'est fournie (ou qu'une valeur de 0 est donnée pour le type de
service), alors l'entrée de menu provoque l'interruption du démarrage par
le réseau et la poursuite du démarrage sur un média local.
le réseau et la poursuite du démarrage sur un média local. L'adresse de serveur
peut être donnée sous la forme de nom de domaine qui est recherché dans
/etc/hosts. Ce nom peut-être associé à plusieurs adresses IP, qui dans ce cas
sont utilisées à tour de rôle (en "round-robin").
.TP
.B --pxe-prompt=[tag:<label>,]<invite>[,<délai>]
Cette option permet d'afficher une invite à la suite du démarrage PXE. Si un
@@ -1079,38 +1128,39 @@ créant des milliers de baux et utilisant beaucoup de mémoire dans le processus
Dnsmasq.
.TP
.B \-K, --dhcp-authoritative
Cette option doit être donnée lorsque Dnsmasq est le seul serveur DHCP sur le
réseau. Cela change le comportement par défaut qui est celui d'un strict respect
des RFC, afin que les requêtes DHCP pour des baux inconnus par des hôtes
inconnus ne soient pas ignorées. Cela permet à de nouveaux hôtes d'obtenir des
baux sans tenir compte de fastidieuses temporisations ("timeout"). Cela permet
également à Dnsmasq de reconstruire sa base de donnée contenant les baux sans
que les clients n'aient besoin de redemander un bail, si celle-ci est perdue.
(IPv4 seulement) Cette option doit être donnée lorsque Dnsmasq est le seul
serveur DHCP sur le réseau. Cela change le comportement par défaut qui est
celui d'un strict respect des RFC, afin que les requêtes DHCP pour des baux
inconnus par des hôtes inconnus ne soient pas ignorées. Cela permet à de
nouveaux hôtes d'obtenir des baux sans tenir compte de fastidieuses
temporisations ("timeout"). Cela permet également à Dnsmasq de reconstruire
sa base de données contenant les baux sans que les clients n'aient besoin de
redemander un bail, si celle-ci est perdue.
.TP
.B --dhcp-alternate-port[=<port serveur>[,<port client>]]
Change les ports utilisés par défaut pour le DHCP. Si cette option est donnée
toute seule sans arguments, alors change les ports utilisés pour le DHCP
de 67 et 68 respectivement à 1067 et 1068. Si un seul argument est donné, ce
(IPv4 seulement) Change les ports utilisés par défaut pour le DHCP. Si cette
option est donnée seule sans argument, alors change les ports utilisés pour le
DHCP de 67 et 68 respectivement à 1067 et 1068. Si un seul argument est donné, ce
numéro est utilisé pour le port serveur et ce numéro plus 1 est utilisé pour le
port client. Enfin, en fournissant deux numéros de ports, il est possible de
spécifier arbitrairement 2 ports à la fois pour le serveur et pour le client DHCP.
.TP
.B \-3, --bootp-dynamic[=<identifiant de réseau>[,<identifiant de réseau>]]
Permet l'allocation dynamique d'adresses IP à des clients BOOTP. Utiliser cette
option avec précaution, une adresse allouée à un client BOOTP étant perpétuelle,
et de fait n'est plus disponibles pour d'autres hôtes. Si aucun argument n'est
donné, alors cette option permet une allocation dynamique dans tous les cas. Si
des arguments sont spécifiés, alors l'allocation ne se fait que lorsque tous
les identifiants coïncident. Il est possible de répeter cette option avec
plusieurs jeux d'arguments.
(IPv4 seulement) Permet l'allocation dynamique d'adresses IP à des clients BOOTP.
Utiliser cette option avec précaution, une adresse allouée à un client BOOTP
étant perpétuelle, et de fait n'est plus disponibles pour d'autres hôtes. Si
aucun argument n'est donné, alors cette option permet une allocation dynamique
dans tous les cas. Si des arguments sont spécifiés, alors l'allocation ne se
fait que lorsque tous les identifiants coïncident. Il est possible de répeter
cette option avec plusieurs jeux d'arguments.
.TP
.B \-5, --no-ping
Par défaut, le serveur DHCP tente de s'assurer qu'une adresse n'est pas utilisée
avant de l'allouer à un hôte. Cela est fait en envoyant une requête ICMP de type
"echo request" (aussi connue sous le nom de "ping") à l'adresse en question. Si
le serveur obtient une réponse, alors l'adresse doit déjà être utilisée et une
autre est essayée. Cette option permet de supprimer cette vérification. A
utiliser avec précaution.
(IPv4 seulement) Par défaut, le serveur DHCP tente de s'assurer qu'une adresse
n'est pas utilisée avant de l'allouer à un hôte. Cela est fait en envoyant une
requête ICMP de type "echo request" (aussi connue sous le nom de "ping") à
l'adresse en question. Si le serveur obtient une réponse, alors l'adresse doit
déjà être utilisée et une autre est essayée. Cette option permet de supprimer
cette vérification. A utiliser avec précaution.
.TP
.B --log-dhcp
Traces additionnelles pour le service DHCP : enregistre toutes les options
@@ -1127,11 +1177,11 @@ chemin est spécifié est exécuté. Le <chemin de fichier> doit être un chemi
absolu, aucune recherche n'est effectuée via la variable d'environnement PATH.
Les arguments fournis à celui-ci sont soit
"add" ("ajouter"), "old" ("ancien") ou "del" ("supprimer"), suivi de l'adresse
MAC de l'hôte puis l'adresse IP et le nom d'hôte si celui-ci est
connu."add" signifie qu'un bail a été créé, "del" signifie qu'il a été supprimé,
"old" notifie que le bail existait au lancement de Dnsmasq, ou un changement
d'adresse MAC ou de nom d'hôte pour un bail existant (ou, dans le cas où
leasefile-ro est spécifié, un changement de durée de bail ou d'identifiant
MAC de l'hôte (ou le DUID pour IPv6) puis l'adresse IP et le nom d'hôte si
celui-ci est connu."add" signifie qu'un bail a été créé, "del" signifie qu'il a
été supprimé, "old" notifie que le bail existait au lancement de Dnsmasq, ou un
changement d'adresse MAC ou de nom d'hôte pour un bail existant (ou, dans le cas
où leasefile-ro est spécifié, un changement de durée de bail ou d'identifiant
d'hôte). Si l'adresse Mac est d'un type de réseau autre qu'ethernet, il est
nécessaire de la préceder du type de réseau, par exemple "06-01:23:45:67:89:ab"
pour du token ring. Le processus est exécuté en temps que super-utilisateur
@@ -1141,18 +1191,16 @@ pour changer son UID pour celle d'un utilisateur non-privilégié.
L'environnement est hérité de celui de l'invocation du processus Dnsmasq,
auquel se rajoute quelques unes ou toutes les variables décrites ci-dessous :
DNSMASQ_CLIENT_ID, si l'hôte a fourni un identifiant de client.
Pour IPv4 et IPv6 :
DNSMASQ_DOMAIN si le nom de domaine pleinement qualifié de l'hôte est connu, la
part relative au domaine y est stockée. (Notez que le nom d'hôte transmis comme
argument au script n'est jamais pleinement qualifié).
Si le client fournit une information de classe de vendeur, un nom d'hôte, ou
des classes d'utilisateur, celles-ci sont fournies dans les
variables DNSMASQ_VENDOR_CLASS et DNSMASQ_USER_CLASS0 à DNSMASQ_USER_CLASSn
et DNSMASQ_SUPPLIED_HOSTNAME respectivement, mais seulement pour les actions
"add" et "old" lorsqu'un hôte reprend un bail existant, ces variables n'étant
pas stockées dans la base de baux de Dnsmasq.
Si le client fournit un nom d'hôte, DNSMASQ_SUPPLIED_HOSTNAME.
Si le client fournit des classes d'utilisateur, DNSMASQ_USER_CLASS0 à
DNSMASQ_USER_CLASSn.
Si Dnsmasq a été compilé avec l'option HAVE_BROKEN_RTC ("horloge RTC
défectueuse"), alors la durée du bail (en secondes) est stockée dans la
@@ -1175,6 +1223,29 @@ relai DHCP pour contacter Dnsmasq, si l'adresse IP du relai est connue.
DNSMASQ_TAGS contient tous les labels fournis pendant la transaction DHCP,
séparés par des espaces.
Pour IPv4 seulement :
DNSMASQ_CLIENT_ID, si l'hôte a fourni un identifiant de client.
Si le client fournit une information de classe de vendeur, DNSMASQ_VENDOR_CLASS.
Pour IPv6 seulement :
Si le client fournit une classe de vendeur (vendor-class), positionne
DNSMASQ_VENDOR_CLASS_ID avec comme contenu le numéro IANA de l'entreprise pour
la classe, et DNSMASQ_VENDOR_CLASS0..DNSMASQ_VENDOR_CLASSn pour les données.
DNSMASQ_SERVER_DUID contient le DUID du serveur : cette valeur est la même
pour chaque appel au script.
DNSMASQ_IAID contenant l'IAID pour le bail. Si le bail est une allocation
temporaire, cela est préfixé par le caractère 'T'.
A noter que le nom d'hôte fourni, la classe de vendeur ou les données de classe
d'utilisateur sont uniquement fournies pour les actions "add" ou l'action "old"
lorsqu'un hôte reprend un bail existant, puisque ces informations ne sont pas
conservées dans la base de baux de dnsmasq.
Tous les descripteurs de fichiers sont fermés, sauf stdin, stdout et stderr qui
sont ouverts sur /dev/null (sauf en mode déverminage).
@@ -1191,11 +1262,50 @@ Au démarrage de Dnsmasq, le script sera invoqué pour chacun des baux existants
dans le fichier des baux. Le script sera lancé avec l'action "del" pour les
baux expirés, et "old" pour les autres. Lorsque Dnsmasq reçoit un signal HUP,
le script sera invoqué avec une action "old" pour tous les baux existants.
.TP
.TP
.B --dhcp-luascript=<chemin>
Spécifie un script écrit en Lua, devant être exécuté lorsque des baux sont
créés, détruits ou modifiés. Pour utiliser cette option, dnsmasq doit être
compilé avec avec le support de Lua. L'interpréteur Lua est initialisé une
seule fois, lorsque dnsmasq démarre, ce qui fait que les variables globales
persistent entre les évênements liés aux baux. Le code Lua doit définir une
fonction
.B lease
et peut fournir des fonctions
.B init
et
.B shutdown
qui sont appellées, sans arguments, lorsque dnsmasq démarre ou s'arrête.
La méthode
.B lease
reçoit les informations détaillées dans
.B --dhcp-script.
Il reçoit deux arguments. Le premier spécifie l'action, qui est une chaîne de
caractères contenant les valeurs "add" (ajout), "old" (réactivation d'un bail
existant) ou "del" (suppression). Le deuxième est une table contenant des
paires de valeurs de labels. Les labels correspondent pour l'essentiel aux
valeurs d'environnement détaillées ci-dessus, ainsi le label "domain" (domaine)
contient les mêmes données que la variable d'environnement DNSMASQ_DOMAIN. Il
existe quelques labels supplémentaires contenant les données fournies comme
arguments à
.B --dhcp-script.
Ces labels sont
.B mac_address, ip_address
(pour respectivement l'adresse MAC et l'adresse IP)
et
.B hostname
(le nom d'hôte) dans le cas d'IPv4, et
.B client_duid, ip_address
(valeur DUID du client et adresse IP respectivement)
ainsi que
.B hostname
(le nom d'hôte) dans le cas d'IPv6.
.TP
.B --dhcp-scriptuser
Spécifie l'utilisateur sous lequel le script lease-change doit être exécuté. La
valeur par défaut correspond à l'utilisateur root mais peut-être changée par le
biais de cette option.
Spécifie l'utilisateur sous lequel le script shell lease-change ou le script
doivent être exécutés. La valeur par défaut correspond à l'utilisateur root
mais peut-être changée par le biais de cette option.
.TP
.B \-9, --leasefile-ro
Supprimer complètement l'usage du fichier servant de base de donnée pour les
@@ -1280,6 +1390,32 @@ sans gamme d'adresses de spécifié lorsque l'option
.B --dhcp-fqdn
est configurée.
.TP
.B --dhcp-client-update
Normalement, lorsque dnsmasq fournit un bail DHCP, il positionne un label
dans l'option FQDN pour indiquer au client qu'il ne doit pas tenter de faire
une mise à jour DDNS avec son nom et son adresse IP. Ceci parce que la paire
Nom-IP est rajoutée automatiquement dans la partie DNS de dnsmasq. Cette option
inhibe ce comportement ce qui est utile, par exemple, pour permettre aux clients
Windows de la mise à jour de serveurs Active Directory. Voir la RFC 4702 pour
plus de détails.
.TP
.B --enable-ra
Active la fonctionalité d'annonces routeurs IPv6 ("IPv6 Router Advertisement").
DHCPv6 ne gère pas la configuration complète du réseau de la même façon que
DHCPv4. La découverte de routeurs et la découverte (éventuelle) de préfixes pour
la création autonome d'adresse sont gérées par un protocole différent.
Lorsque DHCP est utilisé, seul un sous-ensemble de tout ceci est nécessaire et
dnsmasq est à même de le gérer, en utilisant la configuration DHCP présente pour
fournir la majorité des données. Lorsque les annonces routeurs (RA pour "Router
Advertisement") sont activées, dnsmasq va annoncer un préfixe pour chaque
dhcp-range et, par défaut, fournir comme valeur de routeur et de DNS récursif
la valeur d'adresse link-local appropriée parmi celles de la machine sur
laquelle tourne dnsmasq.
Les bits "managed address" sont positionnés, sauf pour un dhcp-range marqué
comme "ra-only" (annonce routeur uniquement). Dans ce cas le service d'annonce
routeur est rendu mais aucun service DHCPv6 n'est assuré, et les bits "managed
address" ne sont pas positionnés.
.TP
.B --enable-tftp[=<interface>]
Active la fonction serveur TFTP. Celui-ci est de manière délibérée limité aux
fonctions nécessaires au démarrage par le réseau ("net-boot") d'un client. Seul
@@ -1547,10 +1683,6 @@ ligne de commande au lieu d'un fichier de configuration, ne pas oublier
d'échapper le caractère !, qui est un méta-caractère d'interpréteur de commande
shell).
+When selecting dhcp-options, a tag from dhcp-range is second class
+relative to other tags, to make it easy to override options for
+individual hosts, so
Lors de la sélection d'une option, une étiquette spécifiée par dhcp-range
passe après les autres étiquettes, ce qui permet de facilement remplacer des
option génériques pour des hôtes spécifiques, ainsi :
+42 -49
View File
@@ -7,7 +7,7 @@ msgstr ""
"Project-Id-Version: dnsmasq 2.56\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-18 12:24+0100\n"
"PO-Revision-Date: 2011-08-16 14:17+0100\n"
"PO-Revision-Date: 2012-03-02 16:26+0100\n"
"Last-Translator: Gildas Le Nadan <3ntr0p13@gmail.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO-8859-1\n"
@@ -410,17 +410,14 @@ msgid "Disable ICMP echo address checking in the DHCP server."
msgstr "Supprime la vérification d'adresse sur le serveur au moyen de paquets ICMP echo"
#: option.c:325
#, fuzzy
msgid "Shell script to run on DHCP lease creation and destruction."
msgstr "Script à exécuter lors de la création ou destruction de bail DHCP."
msgstr "Script shell à exécuter lors de la création ou destruction de bail DHCP."
#: option.c:326
#, fuzzy
msgid "Lua script to run on DHCP lease creation and destruction."
msgstr "Script à exécuter lors de la création ou destruction de bail DHCP."
msgstr "Script Lua à exécuter lors de la création ou destruction de bail DHCP."
#: option.c:327
#, fuzzy
msgid "Run lease-change scripts as this user."
msgstr "Lancer le script 'lease-change' avec cet utilisateur."
@@ -573,11 +570,11 @@ msgstr "Copie les marques de suivi de connexion pour les requ
#: option.c:363
msgid "Allow DHCP clients to do their own DDNS updates."
msgstr ""
msgstr "Autoriser les clients DHCP à faire leurs propres mises à jour DDNS (Dynamic DNS)"
#: option.c:364
msgid "Send router-advertisements for interfaces doing DHCPv6"
msgstr ""
msgstr "envoyer des annonces de routeurs pour toutes les interfaces faisant du DHCPv6"
#: option.c:782
#, c-format
@@ -604,13 +601,13 @@ msgid "Known DHCP options:\n"
msgstr "Options DHCP connues :\n"
#: option.c:838
#, fuzzy, c-format
#, c-format
msgid "Known DHCPv6 options:\n"
msgstr "Options DHCP connues :\n"
msgstr "Options DHCPv6 connues :\n"
#: option.c:973
msgid "unsupported encapsulation for IPv6 option"
msgstr ""
msgstr "encapsulation d'option non supportée pour IPv6"
#: option.c:1001
msgid "bad dhcp-option"
@@ -623,9 +620,8 @@ msgstr "mauvaise adresse IP"
#
#: option.c:1071 option.c:1177 option.c:2511
#, fuzzy
msgid "bad IPv6 address"
msgstr "mauvaise adresse IP"
msgstr "mauvaise adresse IPv6"
#: option.c:1205
msgid "bad domain in dhcp-option"
@@ -683,12 +679,11 @@ msgstr "ne peut ex
#: option.c:1603
msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
msgstr "pour permettre l'exécution de scripts au changement de bail (lease-change), recompiler en définissant HAVE_SCRIPT"
msgstr "recompiler en définissant HAVE_SCRIPT pour permettre l'exécution de scripts shell au changement de bail (lease-change)"
#: option.c:1607
#, fuzzy
msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
msgstr "pour permettre l'exécution de scripts au changement de bail (lease-change), recompiler en définissant HAVE_SCRIPT"
msgstr "recompiler en définissant HAVE_LUASCRIPT pour permettre l'exécution de scripts LUA au changement de bail (lease-change)"
#: option.c:1988 option.c:1992
msgid "bad port"
@@ -726,12 +721,11 @@ msgstr "plage d'adresses DHCP incoh
#: option.c:2374
msgid "prefix must be at least 64"
msgstr ""
msgstr "la valeur de préfixe doit être au minimum 64"
#: option.c:2378
#, fuzzy
msgid "inconsistent DHCPv6 range"
msgstr "plage d'adresses DHCP incohérente"
msgstr "plage d'adresses DHCPv6 incohérente"
#: option.c:2481 option.c:2521
msgid "bad hex constant"
@@ -851,7 +845,7 @@ msgid "Dnsmasq version %s %s\n"
msgstr "Version de Dnsmasq %s %s\n"
#: option.c:3781
#, fuzzy, c-format
#, c-format
msgid ""
"Compile time options: %s\n"
"\n"
@@ -919,9 +913,9 @@ msgid "syntax check OK"
msgstr "vérification de syntaxe OK"
#: forward.c:113
#, fuzzy, c-format
#, c-format
msgid "failed to send packet: %s"
msgstr "impossible de lire sur la socket : %s"
msgstr "impossible d'envoyer le paquet : %s"
#: forward.c:474
#, c-format
@@ -1108,7 +1102,7 @@ msgstr "mode asynchrone d'
#: dnsmasq.c:524
msgid "IPv6 router advertisement enabled"
msgstr ""
msgstr "annonces de routeur IPv6 activées"
#: dnsmasq.c:554
#, c-format
@@ -1116,9 +1110,9 @@ msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr "baux statiques DHCP seulement sur %.0s%s, durée de validité de bail %s"
#: dnsmasq.c:556
#, fuzzy, c-format
#, c-format
msgid "router advertisement only on %.0s%s, lifetime %s"
msgstr "baux statiques DHCP seulement sur %.0s%s, durée de validité de bail %s"
msgstr "annonces de routeurs seulement sur %.0s%s, durée de validité %s"
#: dnsmasq.c:558
#, c-format
@@ -1183,25 +1177,25 @@ msgid "failed to open pidfile %s: %s"
msgstr "impossible de lire le fichier de PID %s : %s"
#: dnsmasq.c:930
#, fuzzy, c-format
#, c-format
msgid "cannot open log %s: %s"
msgstr "Ne peut pas lire %s : %s"
msgstr "Ne peut ouvrir le fichier de log %s : %s"
#
#: dnsmasq.c:933
#, fuzzy, c-format
#, c-format
msgid "failed to load Lua script: %s"
msgstr "impossible de charger %s : %m"
msgstr "impossible de charger le script Lua : %s"
#: dnsmasq.c:1002
#, fuzzy, c-format
#, c-format
msgid "script process killed by signal %d"
msgstr "Le processus fils a été terminé par le signal %d"
msgstr "Le script a été terminé par le signal %d"
#: dnsmasq.c:1006
#, fuzzy, c-format
#, c-format
msgid "script process exited with status %d"
msgstr "Le processus fils s'est terminé avec le statut %d"
msgstr "Le script s'est terminé avec le statut %d"
#: dnsmasq.c:1010
#, c-format
@@ -1506,7 +1500,7 @@ msgstr "requ
#: helper.c:140
msgid "lease() function missing in Lua script"
msgstr ""
msgstr "la fonction lease() est absente du script Lua"
#: tftp.c:285
msgid "unable to get free port for TFTP"
@@ -1557,29 +1551,29 @@ msgid "Conntrack connection mark retrieval failed: %s"
msgstr "La récupération de la marque de suivi de connexion a échoué : %s"
#: dhcp6.c:46
#, fuzzy, c-format
#, c-format
msgid "cannot create DHCPv6 socket: %s"
msgstr "ne peut créer la socket DHCP: %s"
msgstr "ne peut créer la socket DHCPv6: %s"
#: dhcp6.c:57
#, fuzzy, c-format
#, c-format
msgid "failed to bind DHCPv6 server socket: %s"
msgstr "impossible de lier la socket serveur DHCP : %s"
msgstr "impossible de lier la socket serveur DHCPv6 : %s"
#: rfc3315.c:94
#, fuzzy, c-format
#, c-format
msgid "no address range available for DHCPv6 request from relay at %s"
msgstr "pas de plage d'adresse disponible pour la requête DHCP %s %s"
msgstr "pas de plage d'adresse disponible pour la requête DHCPv6 transmise via le relai %s"
#: rfc3315.c:103
#, fuzzy, c-format
#, c-format
msgid "no address range available for DHCPv6 request via %s"
msgstr "pas de plage d'adresse disponible pour la requête DHCP %s %s"
msgstr "pas de plage d'adresse disponible pour la requête DHCPv6 via %s"
#: rfc3315.c:206
#, fuzzy, c-format
#, c-format
msgid "%u available DHCPv6 subnet: %s/%d"
msgstr "%u sous-réseaux DHCP disponibles : %s/%s"
msgstr "%u sous-réseaux DHCPv6 disponibles : %s/%d"
#: dhcp-common.c:138
#, c-format
@@ -1612,16 +1606,15 @@ msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "adresse IP %s (%s) dupliquée dans la directive dhcp-config."
#: dhcp-common.c:443
#, fuzzy, c-format
#, c-format
msgid "failed to join DHCPv6 multicast group: %s"
msgstr "impossible de lier la socket serveur DHCP : %s"
msgstr "impossible de rejoindre le groupe de multicast DHCPv6 : %s"
#: radv.c:76
#, fuzzy, c-format
#, c-format
msgid "cannot create ICMPv6 socket: %s"
msgstr "ne peut créer la socket DHCP: %s"
msgstr "ne peut créer la socket ICMPv6: %s"
#, fuzzy
#~ msgid "Specify path to Lua script (no default)."
#~ msgstr "Spécifie un chemin pour le fichier PID (par défaut : %s)."
+102 -77
View File
@@ -10,14 +10,14 @@ msgstr ""
"Project-Id-Version: pl\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2009-06-10 20:57+0100\n"
"PO-Revision-Date: 2011-08-25 09:50+0200\n"
"PO-Revision-Date: 2012-03-04 01:45+0100\n"
"Last-Translator: Jan Psota <jasiupsota@gmail.com>\n"
"Language-Team: polski <>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"X-Generator: Lokalize 1.1\n"
"X-Generator: poedit-1.4.6.1\n"
"X-Language: pl_PL\n"
#: cache.c:764
@@ -25,17 +25,20 @@ msgstr ""
msgid "failed to load names from %s: %s"
msgstr "nie potrafię wczytać nazw z %s: %s"
#: cache.c:797 dhcp.c:855
#: cache.c:797
#: dhcp.c:855
#, c-format
msgid "bad address at %s line %d"
msgstr "błędny adres w pliku %s, w linii %d"
#: cache.c:846 dhcp.c:871
#: cache.c:846
#: dhcp.c:871
#, c-format
msgid "bad name at %s line %d"
msgstr "błędna nazwa w pliku %s, w linii %d"
#: cache.c:853 dhcp.c:946
#: cache.c:853
#: dhcp.c:946
#, c-format
msgid "read %s - %d addresses"
msgstr "wczytałem %s - %d adresów"
@@ -88,7 +91,8 @@ msgstr "brak możliwości użycia generatora liczb losowych: %s"
msgid "failed to allocate memory"
msgstr "nie udało się przydzielić pamięci"
#: util.c:227 option.c:717
#: util.c:227
#: option.c:717
msgid "could not get memory"
msgstr "nie można dostać pamięci"
@@ -406,19 +410,16 @@ msgid "Disable ICMP echo address checking in the DHCP server."
msgstr "Pominięcie sprawdzania za pomocą ICMP niezajętości adresu przed jego wydzierżawieniem."
#: option.c:325
#, fuzzy
msgid "Shell script to run on DHCP lease creation and destruction."
msgstr "Wskazanie skryptu uruchamianego w przypadku wydzierżawienia adresu lub wygaśnięcia dzierżawy."
msgstr "Skrypt powłoki uruchamiany po przyznaniu lub zwolnieniu adresu."
#: option.c:326
#, fuzzy
msgid "Lua script to run on DHCP lease creation and destruction."
msgstr "Wskazanie skryptu uruchamianego w przypadku wydzierżawienia adresu lub wygaśnięcia dzierżawy."
msgstr "Skrypt Lua uruchamiany po przyznaniu lub zwolnieniu adresu."
#: option.c:327
#, fuzzy
msgid "Run lease-change scripts as this user."
msgstr "Uruchamianie skryptu dhcp-script jako wskazany użytkownik."
msgstr "Wskazanie użytkownika z którego uprawnieniami będą uruchamiane skrypty."
#: option.c:328
msgid "Read configuration from all the files in this directory."
@@ -565,11 +566,11 @@ msgstr "Zachowanie znacznika połączenia z odebranego zapytania DNS w ruchu zew
#: option.c:363
msgid "Allow DHCP clients to do their own DDNS updates."
msgstr ""
msgstr "Zezwolenie klientom DHCP na uaktualnianie DDNS-ów."
#: option.c:364
msgid "Send router-advertisements for interfaces doing DHCPv6"
msgstr ""
msgstr "Załączenie anonsowania (RA) na interfejsach serwujących DHCPv6"
#: option.c:782
#, c-format
@@ -596,13 +597,13 @@ msgid "Known DHCP options:\n"
msgstr "Znane opcje DHCP:\n"
#: option.c:838
#, fuzzy, c-format
#, c-format
msgid "Known DHCPv6 options:\n"
msgstr "Znane opcje DHCP:\n"
msgstr "Rozpoznawane opcje DHCPv6:\n"
#: option.c:973
msgid "unsupported encapsulation for IPv6 option"
msgstr ""
msgstr "nieobsługiwany rodzaj enkapsulacji opcji IPv6"
#: option.c:1001
msgid "bad dhcp-option"
@@ -612,10 +613,11 @@ msgstr "błąd w dhcp-option"
msgid "bad IP address"
msgstr "zły adres IP"
#: option.c:1071 option.c:1177 option.c:2511
#, fuzzy
#: option.c:1071
#: option.c:1177
#: option.c:2511
msgid "bad IPv6 address"
msgstr "zły adres IP"
msgstr "zły adres IPv6"
#: option.c:1205
msgid "bad domain in dhcp-option"
@@ -637,12 +639,14 @@ msgstr "wielokrotne użycie opcji niedozwolone (pojawiła się wcześniej w lini
msgid "illegal repeated keyword"
msgstr "wielokrotne użycie opcji niedozwolone (pojawiła się wsześniej w pliku konfiguracyjnym)"
#: option.c:1452 option.c:3536
#: option.c:1452
#: option.c:3536
#, c-format
msgid "cannot access directory %s: %s"
msgstr "brak dostępu do katalogu %s: %s"
#: option.c:1483 tftp.c:464
#: option.c:1483
#: tftp.c:464
#, c-format
msgid "cannot access %s: %s"
msgstr "brak dostępu do %s: %s"
@@ -676,19 +680,21 @@ msgid "recompile with HAVE_SCRIPT defined to enable lease-change scripts"
msgstr "żeby mieć możliwość używania skryptów wywoływanych przy zmianie dzierżawy, przekompiluj dnsmasq-a z włączoną flagą HAVE_SCRIPT"
#: option.c:1607
#, fuzzy
msgid "recompile with HAVE_LUASCRIPT defined to enable Lua scripts"
msgstr "żeby mieć możliwość używania skryptów wywoływanych przy zmianie dzierżawy, przekompiluj dnsmasq-a z włączoną flagą HAVE_SCRIPT"
msgstr "używanie skryptów Lua, wymaga skompilowania dnsmasq-a z flagą HAVE_LUASCRIPT"
#: option.c:1988 option.c:1992
#: option.c:1988
#: option.c:1992
msgid "bad port"
msgstr "nieprawidłowy numer portu"
#: option.c:2015 option.c:2046
#: option.c:2015
#: option.c:2046
msgid "interface binding not supported"
msgstr "nie ma możliwości dowiązywania do interfejsu"
#: option.c:2026 option.c:3088
#: option.c:2026
#: option.c:3088
msgid "bad interface name"
msgstr "nieprawidłowa nazwa interfejsu"
@@ -714,14 +720,14 @@ msgstr "niespójny zakres adresów DHCP"
#: option.c:2374
msgid "prefix must be at least 64"
msgstr ""
msgstr "prefix musi mieć wartość >=64"
#: option.c:2378
#, fuzzy
msgid "inconsistent DHCPv6 range"
msgstr "niespójny zakres adresów DHCP"
msgstr "niespójny zakres adresów DHCPv6"
#: option.c:2481 option.c:2521
#: option.c:2481
#: option.c:2521
msgid "bad hex constant"
msgstr "zapis niezgodny z formatem szesnastkowym"
@@ -737,7 +743,8 @@ msgstr "niedopuszczalna nazwa komputera w dhcp-host"
msgid "bad tag-if"
msgstr "nieprawidłowa składnia 'tag-if'"
#: option.c:2973 option.c:3258
#: option.c:2973
#: option.c:3258
msgid "invalid port number"
msgstr "nieprawidłowy numer portu"
@@ -814,12 +821,14 @@ msgstr "błąd"
msgid "%s at line %d of %%s"
msgstr "%s w linii %d pliku %%s"
#: option.c:3491 tftp.c:627
#: option.c:3491
#: tftp.c:627
#, c-format
msgid "cannot read %s: %s"
msgstr "błąd odczytu z pliku %s: %s"
#: option.c:3657 option.c:3693
#: option.c:3657
#: option.c:3693
#, c-format
msgid "read %s"
msgstr "przeczytałem %s"
@@ -834,7 +843,7 @@ msgid "Dnsmasq version %s %s\n"
msgstr "Dnsmasq, wersja %s %s\n"
#: option.c:3781
#, fuzzy, c-format
#, c-format
msgid ""
"Compile time options: %s\n"
"\n"
@@ -883,7 +892,9 @@ msgstr "w trybie no-poll można wskazać najwyżej jeden plik resolv.conf."
msgid "must have exactly one resolv.conf to read domain from."
msgstr "musisz mieć dokładnie jeden plik resolv.conf do odczytu domen."
#: option.c:3882 network.c:822 dhcp.c:804
#: option.c:3882
#: network.c:822
#: dhcp.c:804
#, c-format
msgid "failed to read %s: %s"
msgstr "nie udało się odczytać %s: %s"
@@ -902,9 +913,9 @@ msgid "syntax check OK"
msgstr "składnia sprawdzona, jest prawidłowa"
#: forward.c:113
#, fuzzy, c-format
#, c-format
msgid "failed to send packet: %s"
msgstr "błąd przy włączaniu nasłuchu na gnieździe: %s"
msgstr "wysyłanie pakietu nie powiodło się: %s"
#: forward.c:474
#, c-format
@@ -1012,7 +1023,8 @@ msgstr "nieznany interfejs %s"
msgid "no interface with address %s"
msgstr "brak interfejsu z adresem %s"
#: dnsmasq.c:220 dnsmasq.c:770
#: dnsmasq.c:220
#: dnsmasq.c:770
#, c-format
msgid "DBus error: %s"
msgstr "błąd DBus: %s"
@@ -1088,7 +1100,7 @@ msgstr "włączono asynchroniczny tryb zapisu do logów z kolejką na %d komunik
#: dnsmasq.c:524
msgid "IPv6 router advertisement enabled"
msgstr ""
msgstr "anonsowanie routera IPv4 włączone"
#: dnsmasq.c:554
#, c-format
@@ -1096,9 +1108,9 @@ msgid "DHCP, static leases only on %.0s%s, lease time %s"
msgstr "DHCP: tylko statyczne dzierżawy na %.0s%s, czas dzierżawy %s"
#: dnsmasq.c:556
#, fuzzy, c-format
#, c-format
msgid "router advertisement only on %.0s%s, lifetime %s"
msgstr "DHCP: tylko statyczne dzierżawy na %.0s%s, czas dzierżawy %s"
msgstr "tylko anonsowanie routera na %.0s%s, czas życia %s"
#: dnsmasq.c:558
#, c-format
@@ -1162,24 +1174,24 @@ msgid "failed to open pidfile %s: %s"
msgstr "nie udało się otworzyć pliku z PID-em %s: %s"
#: dnsmasq.c:930
#, fuzzy, c-format
#, c-format
msgid "cannot open log %s: %s"
msgstr "nie można otworzyć %s: %s"
msgstr "nie udało się otworzyć logu %s: %s"
#: dnsmasq.c:933
#, fuzzy, c-format
#, c-format
msgid "failed to load Lua script: %s"
msgstr "nie udało się odczytać %s: %s"
msgstr "nie udało się wczytać skryptu Lua: %s"
#: dnsmasq.c:1002
#, fuzzy, c-format
#, c-format
msgid "script process killed by signal %d"
msgstr "proces potomny zabity sygnałem %d"
msgstr "skrypt został zabity sygnałem %d"
#: dnsmasq.c:1006
#, fuzzy, c-format
#, c-format
msgid "script process exited with status %d"
msgstr "proces potomny zakończył się z kodem powrotu %d"
msgstr "skrypt zakończył się z kodem powrotu %d"
#: dnsmasq.c:1010
#, c-format
@@ -1302,7 +1314,8 @@ msgstr "przez"
msgid "%u available DHCP subnet: %s/%s"
msgstr "%u dostępna podsieć DHCP: %s/%s"
#: rfc2131.c:353 rfc3315.c:209
#: rfc2131.c:353
#: rfc3315.c:209
#, c-format
msgid "%u available DHCP range: %s -- %s"
msgstr "%u dostępny zakres adresów DHCP: %s -- %s"
@@ -1311,19 +1324,24 @@ msgstr "%u dostępny zakres adresów DHCP: %s -- %s"
msgid "disabled"
msgstr "wyłączony(a)"
#: rfc2131.c:423 rfc2131.c:941 rfc2131.c:1341
#: rfc2131.c:423
#: rfc2131.c:941
#: rfc2131.c:1341
msgid "ignored"
msgstr "ignoruję"
#: rfc2131.c:438 rfc2131.c:1179
#: rfc2131.c:438
#: rfc2131.c:1179
msgid "address in use"
msgstr "adres jest w użyciu"
#: rfc2131.c:452 rfc2131.c:995
#: rfc2131.c:452
#: rfc2131.c:995
msgid "no address available"
msgstr "brak dostępnego adresu"
#: rfc2131.c:459 rfc2131.c:1142
#: rfc2131.c:459
#: rfc2131.c:1142
msgid "wrong network"
msgstr "nieprawidłowa sieć"
@@ -1331,11 +1349,13 @@ msgstr "nieprawidłowa sieć"
msgid "no address configured"
msgstr "brak skonfigurowanego adresu"
#: rfc2131.c:480 rfc2131.c:1192
#: rfc2131.c:480
#: rfc2131.c:1192
msgid "no leases left"
msgstr "brak wolnych dzierżaw"
#: rfc2131.c:564 rfc3315.c:362
#: rfc2131.c:564
#: rfc3315.c:362
#, c-format
msgid "%u client provides name: %s"
msgstr "klient %u przedstawia się jako %s"
@@ -1354,7 +1374,8 @@ msgstr "%u klasa użytkownika: %s"
msgid "PXE BIS not supported"
msgstr "PXE BIS nie jest obsługiwane"
#: rfc2131.c:911 rfc3315.c:1098
#: rfc2131.c:911
#: rfc3315.c:1098
#, c-format
msgid "disabling DHCP static address %s for %s"
msgstr "wyłączam statyczne przypisanie adresu %s dla %s"
@@ -1363,7 +1384,8 @@ msgstr "wyłączam statyczne przypisanie adresu %s dla %s"
msgid "unknown lease"
msgstr "nieznana dzierżawa"
#: rfc2131.c:964 rfc3315.c:556
#: rfc2131.c:964
#: rfc3315.c:556
#, c-format
msgid "not using configured address %s because it is leased to %s"
msgstr "nie proponuję zakładanego w konfiguracji adresu %s, bo jest on już wydzierżawiony komputerowi %s"
@@ -1373,12 +1395,14 @@ msgstr "nie proponuję zakładanego w konfiguracji adresu %s, bo jest on już wy
msgid "not using configured address %s because it is in use by the server or relay"
msgstr "nie proponuję zakładanego w konfiguracji adresu %s, bo używa go któryś z serwerów"
#: rfc2131.c:977 rfc3315.c:560
#: rfc2131.c:977
#: rfc3315.c:560
#, c-format
msgid "not using configured address %s because it was previously declined"
msgstr "nie proponuję zakładanego w konfiguracji adresu %s, bo już poprzednio został odrzucony"
#: rfc2131.c:993 rfc2131.c:1185
#: rfc2131.c:993
#: rfc2131.c:1185
msgid "no unique-id"
msgstr "brak unikalnego id"
@@ -1440,7 +1464,8 @@ msgstr "nie mam możliwości wysłania opcji %d DHCP/BOOTP: niedostateczna iloś
msgid "PXE menu too large"
msgstr "menu PXE zbyt duże"
#: rfc2131.c:2117 rfc3315.c:1294
#: rfc2131.c:2117
#: rfc3315.c:1294
#, c-format
msgid "%u requested options: %s"
msgstr "%u zażądano: %s"
@@ -1484,7 +1509,7 @@ msgstr "żądanie DHCP od urządzenia nieobsługiwanego typu (%d) odebrano na %s
#: helper.c:140
msgid "lease() function missing in Lua script"
msgstr ""
msgstr "w skrypcie Lua brak funkcji lease()"
#: tftp.c:285
msgid "unable to get free port for TFTP"
@@ -1535,29 +1560,29 @@ msgid "Conntrack connection mark retrieval failed: %s"
msgstr "Nie udało się odcztać znacznika połączenia (conntrack): %s"
#: dhcp6.c:46
#, fuzzy, c-format
#, c-format
msgid "cannot create DHCPv6 socket: %s"
msgstr "nie udało się utworzyć gniazda dla DHCP: %s"
msgstr "nie udało się utworzyć gniazda dla DHCPv6: %s"
#: dhcp6.c:57
#, fuzzy, c-format
#, c-format
msgid "failed to bind DHCPv6 server socket: %s"
msgstr "błąd przy przyznawaniu nazwy gniazdu serwera DHCP: %s"
msgstr "dowiązywanie gniazda serwera DHCPv6 zakończone niepowodzeniem: %s"
#: rfc3315.c:94
#, fuzzy, c-format
#, c-format
msgid "no address range available for DHCPv6 request from relay at %s"
msgstr "nie zdefiniowano zakresu adresów odpowiedniego dla żądania %s %s"
msgstr "nie zdefiniowano zakresu adresów odpowiedniego dla żądania DHCPv6 przekazanego przez %s"
#: rfc3315.c:103
#, fuzzy, c-format
#, c-format
msgid "no address range available for DHCPv6 request via %s"
msgstr "nie zdefiniowano zakresu adresów odpowiedniego dla żądania %s %s"
msgstr "nie zdefiniowano zakresu adresów odpowiedniego dla żądania DHCPv6 od %s"
#: rfc3315.c:206
#, fuzzy, c-format
#, c-format
msgid "%u available DHCPv6 subnet: %s/%d"
msgstr "%u dostępna podsieć DHCP: %s/%s"
msgstr "%u dostępna podsieć DHCPv6: %s/%d"
#: dhcp-common.c:138
#, c-format
@@ -1590,14 +1615,14 @@ msgid "duplicate IP address %s (%s) in dhcp-config directive"
msgstr "powtórzenie adresu IP %s (%s) w opcji dhcp-config"
#: dhcp-common.c:443
#, fuzzy, c-format
#, c-format
msgid "failed to join DHCPv6 multicast group: %s"
msgstr "błąd przy przyznawaniu nazwy gniazdu serwera DHCP: %s"
msgstr "nie udało się przyłączyć do grupy rozgłoszeniowej DHCPv6: %s"
#: radv.c:76
#, fuzzy, c-format
#, c-format
msgid "cannot create ICMPv6 socket: %s"
msgstr "nie udało się utworzyć gniazda dla DHCP: %s"
msgstr "nie udało się utworzyć gniazda dla ICMPv6: %s"
#, fuzzy
#~ msgid "Specify path to Lua script (no default)."
+50 -97
View File
@@ -17,19 +17,9 @@
#include "dnsmasq.h"
#if defined(HAVE_BSD_NETWORK) || defined(HAVE_SOLARIS_NETWORK)
static struct iovec ifconf = {
.iov_base = NULL,
.iov_len = 0
};
static struct iovec ifreq = {
.iov_base = NULL,
.iov_len = 0
};
#include <ifaddrs.h>
#if defined(HAVE_BSD_NETWORK) && !defined(__APPLE__)
#include <sys/sysctl.h>
#include <net/route.h>
#include <net/if_dl.h>
@@ -50,8 +40,12 @@ int arp_enumerate(void *parm, int (*callback)())
struct rt_msghdr *rtm;
struct sockaddr_inarp *sin2;
struct sockaddr_dl *sdl;
struct iovec buff;
int rc;
buff.iov_base = NULL;
buff.iov_len = 0;
mib[0] = CTL_NET;
mib[1] = PF_ROUTE;
mib[2] = 0;
@@ -67,9 +61,9 @@ int arp_enumerate(void *parm, int (*callback)())
while (1)
{
if (!expand_buf(&ifconf, needed))
if (!expand_buf(&buff, needed))
return 0;
if ((rc = sysctl(mib, 6, ifconf.iov_base, &needed, NULL, 0)) == 0 ||
if ((rc = sysctl(mib, 6, buff.iov_base, &needed, NULL, 0)) == 0 ||
errno != ENOMEM)
break;
needed += needed / 8;
@@ -77,7 +71,7 @@ int arp_enumerate(void *parm, int (*callback)())
if (rc == -1)
return 0;
for (next = ifconf.iov_base ; next < (char *)ifconf.iov_base + needed; next += rtm->rtm_msglen)
for (next = buff.iov_base ; next < (char *)buff.iov_base + needed; next += rtm->rtm_msglen)
{
rtm = (struct rt_msghdr *)next;
sin2 = (struct sockaddr_inarp *)(rtm + 1);
@@ -88,19 +82,14 @@ int arp_enumerate(void *parm, int (*callback)())
return 1;
}
#endif
int iface_enumerate(int family, void *parm, int (*callback)())
{
char *ptr;
struct ifreq *ifr;
struct ifconf ifc;
int fd, errsav, ret = 0;
int lastlen = 0;
size_t len = 0;
struct ifaddrs *head, *addrs;
int errsav, ret = 0;
if (family == AF_UNSPEC)
#if defined(HAVE_BSD_NETWORK) && !defined(__APPLE__)
return arp_enumerate(parm, callback);
@@ -112,95 +101,62 @@ int iface_enumerate(int family, void *parm, int (*callback)())
if (family == AF_LOCAL)
family = AF_LINK;
if ((fd = socket(PF_INET, SOCK_DGRAM, 0)) == -1)
if (getifaddrs(&head) == -1)
return 0;
while(1)
{
len += 10*sizeof(struct ifreq);
if (!expand_buf(&ifconf, len))
goto err;
ifc.ifc_len = len;
ifc.ifc_buf = ifconf.iov_base;
if (ioctl(fd, SIOCGIFCONF, &ifc) == -1)
{
if (errno != EINVAL || lastlen != 0)
goto err;
}
else
{
if (ifc.ifc_len == lastlen)
break; /* got a big enough buffer now */
lastlen = ifc.ifc_len;
}
}
for (ptr = ifc.ifc_buf; ptr < (char *)(ifc.ifc_buf + ifc.ifc_len); ptr += len)
{
/* subsequent entries may not be aligned, so copy into
an aligned buffer to avoid nasty complaints about
unaligned accesses. */
len = sizeof(struct ifreq);
#ifdef HAVE_SOCKADDR_SA_LEN
ifr = (struct ifreq *)ptr;
if (ifr->ifr_addr.sa_len > sizeof(ifr->ifr_ifru))
len = ifr->ifr_addr.sa_len + offsetof(struct ifreq, ifr_ifru);
#endif
if (!expand_buf(&ifreq, len))
goto err;
ifr = (struct ifreq *)ifreq.iov_base;
memcpy(ifr, ptr, len);
if (ifr->ifr_addr.sa_family == family)
for (addrs = head; addrs; addrs = addrs->ifa_next)
{
if (addrs->ifa_addr->sa_family == family)
{
int iface_index = if_nametoindex(addrs->ifa_name);
if (iface_index == 0)
continue;
if (family == AF_INET)
{
struct in_addr addr, netmask, broadcast;
broadcast.s_addr = 0;
addr = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr;
if (ioctl(fd, SIOCGIFNETMASK, ifr) == -1)
continue;
netmask = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr;
if (ioctl(fd, SIOCGIFBRDADDR, ifr) != -1)
broadcast = ((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr;
if (!((*callback)(addr,
(int)if_nametoindex(ifr->ifr_name),
netmask, broadcast,
parm)))
addr = ((struct sockaddr_in *) addrs->ifa_addr)->sin_addr;
netmask = ((struct sockaddr_in *) addrs->ifa_netmask)->sin_addr;
broadcast = ((struct sockaddr_in *) addrs->ifa_broadaddr)->sin_addr;
if (!((*callback)(addr, iface_index, netmask, broadcast, parm)))
goto err;
}
#ifdef HAVE_IPV6
else if (family == AF_INET6)
{
struct in6_addr *addr = &((struct sockaddr_in6 *)&ifr->ifr_addr)->sin6_addr;
struct in6_addr *addr = &((struct sockaddr_in6 *) addrs->ifa_addr)->sin6_addr;
unsigned char *netmask = (unsigned char *) &((struct sockaddr_in6 *) addrs->ifa_netmask)->sin6_addr;
int scope_id = ((struct sockaddr_in6 *) addrs->ifa_addr)->sin6_scope_id;
int i, j, prefix = 0;
for (i = 0; i < IN6ADDRSZ; i++, prefix += 8)
if (netmask[i] != 0xff)
break;
if (i != IN6ADDRSZ && netmask[i])
for (j = 7; j > 0; j--, prefix++)
if ((netmask[i] & (1 << j)) == 0)
break;
/* voodoo to clear interface field in address */
if (!option_bool(OPT_NOWILD) && IN6_IS_ADDR_LINKLOCAL(addr))
{
addr->s6_addr[2] = 0;
addr->s6_addr[3] = 0;
}
/* We have no way to determine the prefix, so we assume it's 64 for now....... */
if (!((*callback)(addr, 64,
(int)((struct sockaddr_in6 *)&ifr->ifr_addr)->sin6_scope_id,
(int)if_nametoindex(ifr->ifr_name), 0,
parm)))
if (!((*callback)(addr, prefix, scope_id, iface_index, 0, parm)))
goto err;
}
}
#endif
#ifdef HAVE_DHCP6
else if (family == AF_LINK)
{
/* Assume ethernet again here */
struct sockaddr_dl *sdl = (struct sockaddr_dl *)&ifr->ifr_addr;
if (sdl->sdl_alen != 0 && !((*callback)((int)if_nametoindex(ifr->ifr_name),
ARPHRD_ETHER, LLADDR(sdl), sdl->sdl_alen, parm)))
struct sockaddr_dl *sdl = (struct sockaddr_dl *) addrs->ifa_addr;
if (sdl->sdl_alen != 0 &&
!((*callback)(iface_index, ARPHRD_ETHER, LLADDR(sdl), sdl->sdl_alen, parm)))
goto err;
}
#endif
@@ -211,7 +167,7 @@ int iface_enumerate(int family, void *parm, int (*callback)())
err:
errsav = errno;
close(fd);
freeifaddrs(head);
errno = errsav;
return ret;
@@ -228,13 +184,10 @@ void init_bpf(void)
while (1)
{
/* useful size which happens to be sufficient */
if (expand_buf(&ifreq, sizeof(struct ifreq)))
{
sprintf(ifreq.iov_base, "/dev/bpf%d", i++);
if ((daemon->dhcp_raw_fd = open(ifreq.iov_base, O_RDWR, 0)) != -1)
return;
}
sprintf(daemon->dhcp_buff, "/dev/bpf%d", i++);
if ((daemon->dhcp_raw_fd = open(daemon->dhcp_buff, O_RDWR, 0)) != -1)
return;
if (errno != EBUSY)
die(_("cannot create DHCP BPF socket: %s"), NULL, EC_BADNET);
}
+18 -9
View File
@@ -396,7 +396,7 @@ void emit_dbus_signal(int action, struct dhcp_lease *lease, char *hostname)
DBusConnection *connection = (DBusConnection *)daemon->dbus;
DBusMessage* message = NULL;
DBusMessageIter args;
char *action_str, *addr, *mac = daemon->namebuff;
char *action_str, *mac = daemon->namebuff;
unsigned char *p;
int i;
@@ -406,10 +406,21 @@ void emit_dbus_signal(int action, struct dhcp_lease *lease, char *hostname)
if (!hostname)
hostname = "";
p = extended_hwaddr(lease->hwaddr_type, lease->hwaddr_len,
lease->hwaddr, lease->clid_len, lease->clid, &i);
print_mac(mac, p, i);
#ifdef HAVE_DHCP6
if (lease->flags & (LEASE_TA | LEASE_NA))
{
print_mac(mac, lease->clid, lease->clid_len);
inet_ntop(AF_INET6, lease->hwaddr, daemon->addrbuff, ADDRSTRLEN);
}
else
#endif
{
p = extended_hwaddr(lease->hwaddr_type, lease->hwaddr_len,
lease->hwaddr, lease->clid_len, lease->clid, &i);
print_mac(mac, p, i);
inet_ntop(AF_INET, &lease->addr, daemon->addrbuff, ADDRSTRLEN);
}
if (action == ACTION_DEL)
action_str = "DhcpLeaseDeleted";
else if (action == ACTION_ADD)
@@ -419,14 +430,12 @@ void emit_dbus_signal(int action, struct dhcp_lease *lease, char *hostname)
else
return;
addr = inet_ntoa(lease->addr);
if (!(message = dbus_message_new_signal(DNSMASQ_PATH, DNSMASQ_SERVICE, action_str)))
return;
dbus_message_iter_init_append(message, &args);
if (dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &addr) &&
if (dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &daemon->addrbuff) &&
dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &mac) &&
dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &hostname))
dbus_connection_send(connection, message, NULL);
+32 -17
View File
@@ -365,36 +365,51 @@ struct dhcp_config *find_config6(struct dhcp_config *configs,
void make_duid(time_t now)
{
/* rebase epoch to 1/1/2000 */
time_t newnow = now - 946684800;
iface_enumerate(AF_LOCAL, &newnow, make_duid1);
if(!daemon->duid)
die("Cannot create DHCPv6 server DUID: %s", NULL, EC_MISC);
if (daemon->duid_config)
{
unsigned char *p;
daemon->duid = p = safe_malloc(daemon->duid_config_len + 6);
daemon->duid_len = daemon->duid_config_len + 6;
PUTSHORT(2, p); /* DUID_EN */
PUTLONG(daemon->duid_enterprise, p);
memcpy(p, daemon->duid_config, daemon->duid_config_len);
}
else
{
/* rebase epoch to 1/1/2000 */
time_t newnow = now - 946684800;
iface_enumerate(AF_LOCAL, &newnow, make_duid1);
if(!daemon->duid)
die("Cannot create DHCPv6 server DUID: %s", NULL, EC_MISC);
}
}
static int make_duid1(int index, unsigned int type, char *mac, size_t maclen, void *parm)
{
/* create DUID as specified in RFC3315. We use the MAC of the
first interface we find that isn't loopback or P-to-P */
first interface we find that isn't loopback or P-to-P and
has address-type < 256. Address types above 256 are things like
tunnels which don't have usable MAC addresses. */
unsigned char *p;
(void)index;
if (type >= 256)
return 1;
#ifdef HAVE_BROKEN_RTC
daemon->duid = p = safe_malloc(maclen + 4);
daemon->duid_len = maclen + 4;
PUTSHORT(3, p); /* DUID_LL */
PUTSHORT(type, p); /* address type */
#else
daemon->duid = p = safe_malloc(maclen + 8);
daemon->duid_len = maclen + 8;
#ifdef HAVE_BROKEN_RTC
PUTSHORT(3, p); /* DUID_LL */
#else
PUTSHORT(1, p); /* DUID_LLT */
#endif
PUTSHORT(type, p); /* address type */
#ifndef HAVE_BROKEN_RTC
PUTLONG(*((time_t *)parm), p); /* time */
#endif
+22 -7
View File
@@ -106,16 +106,14 @@ int main (int argc, char **argv)
else
open("/dev/null", O_RDWR);
#ifdef HAVE_LINUX_NETWORK
netlink_init();
#elif !(defined(IP_RECVDSTADDR) && \
defined(IP_RECVIF) && \
defined(IP_SENDSRCADDR))
#ifndef HAVE_LINUX_NETWORK
# if !(defined(IP_RECVDSTADDR) && defined(IP_RECVIF) && defined(IP_SENDSRCADDR))
if (!option_bool(OPT_NOWILD))
{
bind_fallback = 1;
set_option_bool(OPT_NOWILD);
}
# endif
#endif
#ifndef HAVE_TFTP
@@ -180,10 +178,25 @@ int main (int argc, char **argv)
if (daemon->dhcp6)
dhcp6_init();
if (daemon->ra_contexts || daemon->dhcp6)
join_multicast();
# endif
#endif
#ifdef HAVE_LINUX_NETWORK
/* After lease_init */
netlink_init();
#endif
#ifdef HAVE_DHCP6
/* after netlink_init */
if (daemon->ra_contexts || daemon->dhcp6)
join_multicast();
#endif
#ifdef HAVE_DHCP
/* after netlink_init */
if (daemon->dhcp || daemon->dhcp6)
lease_find_interfaces(now);
#endif
if (!enumerate_interfaces())
@@ -552,6 +565,8 @@ int main (int argc, char **argv)
my_syslog(MS_DHCP | LOG_INFO,
(dhcp_tmp->flags & CONTEXT_STATIC) ?
_("DHCP, static leases only on %.0s%s, lease time %s") :
(dhcp_tmp->flags & CONTEXT_RA_NAME) ?
_("router advertisement with DHCPv4-derived names on %.0s%s, lifetime %s") :
(dhcp_tmp->flags & CONTEXT_RA_ONLY) ?
_("router advertisement only on %.0s%s, lifetime %s") :
(dhcp_tmp->flags & CONTEXT_PROXY) ?
+12
View File
@@ -621,6 +621,7 @@ struct dhcp_context {
#define CONTEXT_PROXY 8
#define CONTEXT_RA_ONLY 16
#define CONTEXT_RA_DONE 32
#define CONTEXT_RA_NAME 64
struct ping_result {
struct in_addr addr;
@@ -629,6 +630,13 @@ struct ping_result {
struct ping_result *next;
};
struct subnet_map {
int iface;
struct in6_addr subnet;
struct subnet_map *next;
};
struct tftp_file {
int refcount, fd;
off_t size;
@@ -723,6 +731,8 @@ extern struct daemon {
struct tftp_prefix *if_prefix; /* per-interface TFTP prefixes */
struct interface_list *tftp_interfaces; /* interfaces for limited TFTP service */
int tftp_unlimited;
unsigned int duid_enterprise, duid_config_len;
unsigned char *duid_config;
/* globally used stuff for DNS */
char *packet; /* packet buffer */
@@ -948,6 +958,7 @@ void lease_prune(struct dhcp_lease *target, time_t now);
void lease_update_from_configs(void);
int do_script_run(time_t now);
void rerun_scripts(void);
void lease_find_interfaces(time_t now);
#ifdef HAVE_SCRIPT
void lease_add_extradata(struct dhcp_lease *lease, unsigned char *data,
unsigned int len, int delim);
@@ -1083,4 +1094,5 @@ void ra_init(time_t now);
void icmp6_packet(void);
time_t periodic_ra(time_t now);
void ra_start_unsolicted(time_t now);
struct subnet_map *build_subnet_map(void);
#endif
+104 -12
View File
@@ -175,16 +175,6 @@ void lease_init(time_t now)
file_dirty = 0;
lease_prune(NULL, now);
dns_dirty = 1;
#ifdef HAVE_DHCP6
/* If we're not doing DHCPv6, and there are not v6 leases, don't add the DUID to the database */
if (!daemon->duid && daemon->dhcp6)
{
file_dirty = 1;
make_duid(now);
}
#endif
}
void lease_update_from_configs(void)
@@ -340,20 +330,122 @@ void lease_update_file(time_t now)
alarm((unsigned)difftime(next_event, now));
}
void lease_update_dns(void)
static int find_interface_v4(struct in_addr local, int if_index,
struct in_addr netmask, struct in_addr broadcast, void *vparam)
{
struct dhcp_lease *lease;
(void) broadcast;
(void) vparam;
for (lease = leases; lease; lease = lease->next)
if (!(lease->flags & (LEASE_TA | LEASE_NA)))
if (is_same_net(local, lease->addr, netmask))
lease->last_interface = if_index;
return 1;
}
#ifdef HAVE_DHCP6
static int find_interface_v6(struct in6_addr *local, int prefix,
int scope, int if_index, int dad, void *vparam)
{
struct dhcp_lease *lease;
(void) scope;
(void) vparam;
(void)dad;
for (lease = leases; lease; lease = lease->next)
if ((lease->flags & (LEASE_TA | LEASE_NA)))
if (is_same_net6(local, (struct in6_addr *)&lease->hwaddr, prefix))
lease->last_interface = if_index;
return 1;
}
#endif
/* Find interfaces associated with leases at start-up. This gets updated as
we do DHCP transactions, but information about directly-connected subnets
is useful from scrips and necessary for determining SLAAC addresses from
start-time. */
void lease_find_interfaces(time_t now)
{
iface_enumerate(AF_INET, NULL, find_interface_v4);
#ifdef HAVE_DHCP6
iface_enumerate(AF_INET6, NULL, find_interface_v6);
/* If we're not doing DHCPv6, and there are not v6 leases, don't add the DUID to the database */
if (!daemon->duid && daemon->dhcp6)
{
file_dirty = 1;
make_duid(now);
}
#endif
}
void lease_update_dns(void)
{
struct dhcp_lease *lease;
if (daemon->port != 0 && dns_dirty)
{
cache_unhash_dhcp();
#ifdef HAVE_DHCP6
struct subnet_map *subnets = build_subnet_map();
#endif
cache_unhash_dhcp();
for (lease = leases; lease; lease = lease->next)
{
int prot = AF_INET;
#ifdef HAVE_DHCP6
if (lease->flags & (LEASE_TA | LEASE_NA))
prot = AF_INET6;
else if (lease->hostname || lease->fqdn)
{
struct subnet_map *map;
for (map = subnets; map; map = map->next)
if (lease->last_interface == map->iface)
{
struct in6_addr addr = map->subnet;
if (lease->hwaddr_len == 6 &&
(lease->hwaddr_type == ARPHRD_ETHER || lease->hwaddr_type == ARPHRD_IEEE802))
{
/* convert MAC address to EUI-64 */
memcpy(&addr.s6_addr[8], lease->hwaddr, 3);
memcpy(&addr.s6_addr[13], &lease->hwaddr[3], 3);
addr.s6_addr[11] = 0xff;
addr.s6_addr[12] = 0xfe;
}
#if defined(ARPHRD_EUI64)
else if (lease->hwaddr_len == 8 &&
lease->hwaddr_type == ARPHRD_EUI64)
memcpy(&addr.s6_addr[8], lease->hwaddr, 8);
#endif
#if defined(ARPHRD_IEEE1394) && defined(ARPHRD_EUI64)
else if (lease->clid_len == 9 &&
lease->clid[0] == ARPHRD_EUI64 &&
lease->hwaddr_type == ARPHRD_IEEE1394)
/* firewire has EUI-64 identifier as clid */
memcpy(&addr.s6_addr[8], &lease->clid[1], 8);
#endif
else
continue;
addr.s6_addr[8] ^= 0x02;
if (lease->fqdn)
cache_add_dhcp_entry(lease->fqdn, AF_INET6, (struct all_addr *)&addr, lease->expires);
if (!option_bool(OPT_DHCP_FQDN) && lease->hostname)
cache_add_dhcp_entry(lease->hostname, AF_INET6, (struct all_addr *)&addr, lease->expires);
}
}
#endif
if (lease->fqdn)
+24 -1
View File
@@ -115,6 +115,7 @@ struct myoption {
#define LOPT_FQDN 304
#define LOPT_LUASCRIPT 305
#define LOPT_RA 306
#define LOPT_DUID 307
#ifdef HAVE_GETOPT_LONG
static const struct option opts[] =
@@ -235,6 +236,7 @@ static const struct myoption opts[] =
{ "dhcp-client-update", 0, 0, LOPT_FQDN },
{ "dhcp-luascript", 1, 0, LOPT_LUASCRIPT },
{ "enable-ra", 0, 0, LOPT_RA },
{ "dhcp-duid", 1, 0, LOPT_DUID },
{ NULL, 0, 0, 0 }
};
@@ -362,6 +364,7 @@ static struct {
{ LOPT_CONNTRACK, OPT_CONNTRACK, NULL, gettext_noop("Copy connection-track mark from queries to upstream connections."), NULL },
{ LOPT_FQDN, OPT_FQDN_UPDATE, NULL, gettext_noop("Allow DHCP clients to do their own DDNS updates."), NULL },
{ LOPT_RA, OPT_RA, NULL, gettext_noop("Send router-advertisements for interfaces doing DHCPv6"), NULL },
{ LOPT_DUID, ARG_ONE, "<enterprise>,<duid>", gettext_noop("Specify DUID_EN-type DHCPv6 server DUID"), NULL },
{ 0, 0, NULL, NULL, NULL }
};
@@ -2345,6 +2348,11 @@ static char *one_opt(int option, char *arg, char *gen_prob, int command_line)
memcpy(&new->end6, &new->start6, IN6ADDRSZ);
new->flags |= CONTEXT_RA_ONLY;
}
else if (strcmp(a[1], "ra-names") == 0)
{
memcpy(&new->end6, &new->start6, IN6ADDRSZ);
new->flags |= CONTEXT_RA_NAME | CONTEXT_RA_ONLY;
}
else if (!inet_pton(AF_INET6, a[1], &new->end6))
option = '?';
@@ -2370,7 +2378,9 @@ static char *one_opt(int option, char *arg, char *gen_prob, int command_line)
{
new->prefix = pref;
leasepos = 3;
if (new->prefix < 64)
if ((new->flags & CONTEXT_RA_ONLY) && new->prefix != 64)
problem = _("prefix must be exactly 64 for RA subnets");
else if (new->prefix < 64)
problem = _("prefix must be at least 64");
}
}
@@ -3040,6 +3050,19 @@ static char *one_opt(int option, char *arg, char *gen_prob, int command_line)
break;
#endif
#ifdef HAVE_DHCP6
case LOPT_DUID: /* --dhcp-duid */
if (!(comma = split(arg)) || !atoi_check(arg, (int *)&daemon->duid_enterprise))
problem = _("bad DUID");
else
{
daemon->duid_config_len = parse_hex(comma,(unsigned char *)comma, strlen(comma), NULL, NULL);
daemon->duid_config = opt_malloc(daemon->duid_config_len);
memcpy(daemon->duid_config, comma, daemon->duid_config_len);
}
break;
#endif
case 'V': /* --alias */
{
char *dash, *a[3] = { NULL, NULL, NULL };
+70 -1
View File
@@ -54,7 +54,7 @@ void ra_init(time_t now)
int class = IPTOS_CLASS_CS6;
#endif
int val = 255; /* radvd uses this value */
size_t len = sizeof(int);
socklen_t len = sizeof(int);
/* ensure this is around even if we're not doing DHCPv6 */
expand_buf(&daemon->outpacket, sizeof(struct dhcp_packet));
@@ -426,4 +426,73 @@ static int iface_search(struct in6_addr *local, int prefix,
return 1; /* keep searching */
}
static int add_subnet(struct in6_addr *local, int prefix,
int scope, int if_index, int dad, void *vparam)
{
struct dhcp_context *context;
struct subnet_map **subnets = vparam;
struct subnet_map *map;
(void)scope;
(void)dad;
for (context = daemon->ra_contexts; context; context = context->next)
if ((context->flags & CONTEXT_RA_NAME) &&
prefix == context->prefix &&
is_same_net6(local, &context->start6, prefix) &&
is_same_net6(local, &context->end6, prefix))
{
for (map = *subnets; map; map = map->next)
if (map->iface == 0 ||
(map->iface == if_index && is_same_net6(local, &map->subnet, prefix)))
break;
/* It's there already */
if (map && map->iface != 0)
continue;
if (!map && (map = whine_malloc(sizeof(struct subnet_map))))
{
map->next = *subnets;
*subnets = map;
}
if (map)
{
map->iface = if_index;
map->subnet = *local;
}
}
return 1;
}
/* Build a map from ra-names subnets to corresponding interfaces. This
is used to go from DHCPv4 leases to SLAAC addresses,
interface->IPv6-subnet, IPv6-subnet + MAC address -> SLAAC.
*/
struct subnet_map *build_subnet_map(void)
{
struct subnet_map *map;
struct dhcp_context *context;
static struct subnet_map *subnets = NULL;
for (context = daemon->ra_contexts; context; context = context->next)
if ((context->flags & CONTEXT_RA_NAME))
break;
/* no ra-names, no need to go further. */
if (!context)
return NULL;
/* mark unused */
for (map = subnets; map; map = map->next)
map->iface = 0;
if (iface_enumerate(AF_INET6, &subnets, add_subnet))
return subnets;
return NULL;
}
#endif
+1 -1
View File
@@ -25,7 +25,7 @@ static int add_resource_record(struct dns_header *header, char *limit, int *trun
((size_t)((pp) - (unsigned char *)(header) + (len)) <= (plen))
#define ADD_RDLEN(header, pp, plen, len) \
(!CHECK_LEN(header, pp, plen, len) ? 0 : (long)((pp) += (len)), 1)
(!CHECK_LEN(header, pp, plen, len) ? 0 : (((pp) += (len)), 1))
static int extract_name(struct dns_header *header, size_t plen, unsigned char **pp,
char *name, int isExtract, int extrabytes)
+6 -1
View File
@@ -737,6 +737,11 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh
{
if (address_assigned)
{
o1 = new_opt6(OPTION6_STATUS_CODE);
put_opt6_short(DHCP6SUCCESS);
put_opt6_string("Oh hai from dnsmasq");
end_opt6(o1);
if (ia_type == OPTION6_IA_NA)
{
/* go back an fill in fields in IA_NA option */
@@ -750,7 +755,7 @@ static int dhcp6_no_relay(int msg_type, struct in6_addr *link_address, struct dh
}
else
{
/* no address, return erro */
/* no address, return error */
o1 = new_opt6(OPTION6_STATUS_CODE);
put_opt6_short(DHCP6NOADDRS);
put_opt6_string("No addresses available");