Signatur
Beschreibung
radius_put_vendor_addr ermöglicht es, einem laufenden RADIUS-Request ein sogenanntes Vendor-Specific Attribute (VSA) vom Typ IP-Adresse hinzuzufügen. Solche herstellerspezifischen Attribute werden von RADIUS-Servern und Netzwerkgeräten verwendet, um proprietäre Konfigurationsdaten auszutauschen, die über den Standard-RADIUS-Attributsatz (RFC 2865) hinausgehen.
Der Vendor-Identifier ($vendor) identifiziert den Hersteller gemäß der IANA Private Enterprise Number (PEN). Der Attributtyp ($type) ist herstellerabhängig und muss der jeweiligen Hersteller-Dokumentation entnommen werden. Die IP-Adresse wird als Zeichenkette in der üblichen IPv4-Punkt-Notation übergeben (z. B. "192.168.1.1").
Diese Funktion muss vor dem eigentlichen Versenden des Requests (mit radius_send_request) aufgerufen werden. Sie ist Teil der PECL-Erweiterung radius und wird typischerweise in Szenarien eingesetzt, in denen NAS-Geräte (Network Access Server) oder VPN-Gateways herstellerspezifische IP-Adressen übermitteln müssen, etwa für Framed-IP-Zuweisungen oder Policy-Routing.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $radius_handle Pflicht | resource | Ein gültiges RADIUS-Handle, das zuvor mit radius_auth_open() oder radius_acct_open() erzeugt wurde. |
|
| $vendor Pflicht | int | Die IANA Private Enterprise Number (PEN) des Herstellers, z. B. 9 für Cisco Systems. |
|
| $type Pflicht | int | Der herstellerspezifische Attributtyp als Integer, wie er in der Dokumentation des jeweiligen Herstellers definiert ist. | |
| $addr Pflicht | string | Die IP-Adresse als Zeichenkette in IPv4-Punkt-Notation, z. B. "10.0.0.1". |
Rückgabewert
true zurück, wenn das Attribut erfolgreich zum Request hinzugefügt wurde. Bei einem Fehler wird false zurückgegeben; die Fehlerursache kann mit radius_strerror() abgefragt werden.Beispiele
Cisco-spezifisches IP-Attribut zu einem RADIUS-Auth-Request hinzufügen
<?php
// RADIUS-Handle öffnen
$radius = radius_auth_open();
if (!$radius) {
die('Konnte RADIUS-Handle nicht öffnen');
}
// Server konfigurieren
radius_add_server($radius, '192.168.1.100', 1812, 'geheimes_passwort', 5, 3);
// Neuen Auth-Request erstellen
radius_create_request($radius, RADIUS_ACCESS_REQUEST);
// Standard-Attribute setzen
radius_put_attr($radius, RADIUS_USER_NAME, 'testbenutzer');
radius_put_attr($radius, RADIUS_USER_PASSWORD, 'passwort123');
// Cisco Vendor-ID: 9
// Cisco VSA Typ 1 = Cisco-AVPair (hier nur beispielhaft als IP-Adress-Attribut)
$vendor = 9; // Cisco Systems IANA PEN
$attr_type = 26; // Beispielhafter herstellerspezifischer Attributtyp
$ip = '10.10.10.5';
if (!radius_put_vendor_addr($radius, $vendor, $attr_type, $ip)) {
echo 'Fehler: ' . radius_strerror($radius) . PHP_EOL;
} else {
echo 'Vendor-IP-Attribut erfolgreich hinzugefügt.' . PHP_EOL;
}
// Request absenden
$result = radius_send_request($radius);
if ($result === RADIUS_ACCESS_ACCEPT) {
echo 'Zugang gewährt.' . PHP_EOL;
} else {
echo 'Zugang verweigert oder Fehler.' . PHP_EOL;
}
radius_close($radius);
?>
Accounting-Request mit herstellerspezifischer IP-Zuweisung
<?php
$radius = radius_acct_open();
radius_add_server($radius, '192.168.1.100', 1813, 'acct_secret', 5, 3);
radius_create_request($radius, RADIUS_ACCOUNTING_REQUEST);
// Pflicht-Attribute für Accounting
radius_put_attr($radius, RADIUS_ACCT_STATUS_TYPE, RADIUS_START);
radius_put_attr($radius, RADIUS_USER_NAME, 'benutzer42');
// Herstellerspezifisches Framed-IP für einen fiktiven Hersteller (PEN: 12345)
$vendor_id = 12345;
$attr_framed_ip = 5; // fiktiver Attributtyp für zugewiesene IP
$zugewiesene_ip = '172.16.0.99';
if (radius_put_vendor_addr($radius, $vendor_id, $attr_framed_ip, $zugewiesene_ip)) {
echo 'Framed-IP-Attribut gesetzt: ' . $zugewiesene_ip . PHP_EOL;
} else {
echo 'Fehler beim Setzen: ' . radius_strerror($radius) . PHP_EOL;
}
radius_send_request($radius);
radius_close($radius);
?>
// Wichtig · Fallstricke
Reihenfolge beachten: radius_put_vendor_addr muss nach radius_create_request() und vor radius_send_request() aufgerufen werden, da Attribute nur in einem offenen, noch nicht gesendeten Request gesetzt werden können.
Nur IPv4: Die Funktion erwartet eine IPv4-Adresse in Punkt-Notation. IPv6-Adressen werden nicht unterstützt — hierfür gibt es keine standardisierte RADIUS-Entsprechung in der PECL-radius-Erweiterung.
PECL-Abhängigkeit: Die Funktion ist nur verfügbar, wenn die PECL-Erweiterung radius installiert und geladen ist. Sie ist nicht Teil der PHP-Standardinstallation.