Added support for searching for arp entry

This commit is contained in:
laf
2016-06-27 14:48:07 +01:00
parent 692c29cbd8
commit 0b8f06efa3
3 changed files with 83 additions and 0 deletions

View File

@ -49,6 +49,8 @@
- [`bills`](#api-bills)
- [`list_bills`](#api-route-22)
- [`get_bill`](#api-route-23)
- [`resources`](#api-resources)
- [`list_arp`](#api-resources-list_arp)
Describes the API structure.
# <a name="api-structure">`Structure`</a> [`top`](#top)
@ -1403,3 +1405,37 @@ Output:
}
```
### <a name="api-resources-list_arp">Function: `list_arp`</a> [`top`](#top)
Retrieve a specific ARP entry or all ARP enties for a device
Route: /api/v0/resources/ip/arp/:ip
- ip is the specific IP you would like to query, if this is all then you need to pass ?device=_hostname_ (or device id)
Input:
- device if you specify all for the IP then you need to populate this with the hostname or id of the device.
Example:
```curl
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/resources/ip/arp/1.1.1.1
curl -H 'X-Auth-Token: YOURAPITOKENHERE' https://librenms.org/api/v0/resources/ip/arp/1.1.1.1?device=localhost
```
Output:
```text
{
"status": "ok",
"err-msg": "",
"count": 1,
"arp": [
{
"port_id": "229",
"mac_address": "da160e5c2002",
"ipv4_address": "1.1.1.1",
"context_name": ""
}
]
}
```

View File

@ -141,6 +141,19 @@ $app->group(
}
);
// End Routing
// Resources section
$app->group(
'/resources',
function () use ($app) {
$app->group(
'/ip',
function () use ($app) {
$app->get('/arp/:ip', 'authToken', 'list_arp')->name('list_arp');
}
);
}
);
// End Resources
}
);
$app->get('/v0', 'authToken', 'show_endpoints');

View File

@ -1323,3 +1323,37 @@ function list_ipsec() {
$app->response->headers->set('Content-Type', 'application/json');
echo _json_encode($output);
}
function list_arp() {
$app = \Slim\Slim::getInstance();
$router = $app->router()->getCurrentRoute()->getParams();
$status = 'error';
$code = 404;
$message = '';
$ip = $router['ip'];
if (empty($ip)) {
$message = "No valid IP provided";
}
else {
$code = 200;
$status = 'ok';
if ($ip === "all") {
$hostname = mres($_GET['device']);
$device_id = ctype_digit($hostname) ? $hostname : getidbyname($hostname);
$arp = dbFetchRows("SELECT `ipv4_mac`.* FROM `ipv4_mac` LEFT JOIN `ports` ON `ipv4_mac`.`port_id` = `ports`.`port_id` WHERE `ports`.`device_id` = ?", array($device_id));
}
else {
$arp = dbFetchRows("SELECT * FROM `ipv4_mac` WHERE `ipv4_address`=?", array($ip));
}
$total = count($arp);
}
$output = array(
'status' => $status,
'err-msg' => $message,
'count' => $total,
'arp' => $arp,
);
$app->response->setStatus($code);
$app->response->headers->set('Content-Type', 'application/json');
echo _json_encode($output);
}