anything else for on. If unspecified, it defaults to 1. Enforcement can be
turned on/off at runtime with SIGUSR1.
+bind_addr <IP address string>
+Can be used to optionally specify which address DRL should use when binding
+its inter-limiter communication socket.
+
netem_loss <int>
netem_delay <int>
netem_slice <int|ALL>
* Add the config options for DRL.
*/
-static config_entry_t create_htb = {
+static config_entry_t bind_addr = {
.next = NULL,
+ .key = "bind_addr",
+ .type = CONFIG_TYPE_STRING,
+ .options = CONFIG_OPT_NONE,
+ .u = { .string = "AUTO" },
+};
+
+static config_entry_t create_htb = {
+ .next = &bind_addr,
.key = "create_htb",
.type = CONFIG_TYPE_INT,
.options = CONFIG_OPT_NONE,
pthread_rwlock_init(&limiter.limiter_lock,NULL);
/* determine our local IP by iterating through interfaces */
- limiter.ip = get_local_ip();
- if (limiter.ip == NULL) {
- printlog(LOG_CRITICAL, "ulogd_DRL unable to aquire local IP address, not registering.\n");
- return false;
+ if (strncmp(bind_addr.u.string, "AUTO", 4)) {
+ limiter.ip = bind_addr.u.string;
+ } else {
+ limiter.ip = get_local_ip();
+ if (limiter.ip == NULL) {
+ printlog(LOG_CRITICAL, "ulogd_DRL unable to aquire local IP address, not registering.\n");
+ return false;
+ }
}
limiter.localaddr = inet_addr(limiter.ip);
limiter.port = htons(LIMITER_LISTEN_PORT);
limiter.udp_socket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (limiter.udp_socket < 0) {
+ perror("socket()");
printlog(LOG_CRITICAL, "Failed to create UDP socket().\n");
return false;
}
server_address.sin_port = limiter.port;
if (bind(limiter.udp_socket, (struct sockaddr *) &server_address, sizeof(server_address)) < 0) {
+ perror("bind()");
printlog(LOG_CRITICAL, "Failed to bind UDP socket.\n");
return false;
}
# When this is set to 0, identities must specify an htb_node and
# htb_parent property in the drl xml file.
create_htb=0
+# Used to optionally specify which IP address DRL's communication
+# socket should attempt to bind to.
+bind_addr="AUTO"
[NETFLOW]
# PlanetLab NetFlow logging