@@ -136,6 +136,59 @@ function jailadmin_schema() {
),
);

$schema['jailadmin_epair_aliases'] = array(
'description' => 'IP aliases for an epair device',
'fields' => array(
'device' => array(
'type' => 'varchar',
'length' => 20,
'not null' => TRUE,
),
'ip' => array(
'type' => 'varchar',
'length' => 45,
'not null' => TRUE,
),
),
);

$schema['jailadmin_bridge_aliases'] = array(
'description' => 'IP aliases for an epair device',
'fields' => array(
'device' => array(
'type' => 'varchar',
'length' => 20,
'not null' => TRUE,
),
'ip' => array(
'type' => 'varchar',
'length' => 45,
'not null' => TRUE,
),
),
);

$schema['jailadmin_routes'] = array(
'description' => 'IPv4 and IPv6 routes to add upon jail bootup',
'fields' => array(
'jail' => array(
'type' => 'varchar',
'length' => '100',
'not null' => TRUE,
),
'source' => array(
'type' => 'varchar',
'length' => 45,
'not null' => TRUE,
),
'destination' => array(
'type' => 'varchar',
'length' => 45,
'not null' => TRUE,
),
),
);

$schema['jailadmin_templates'] = array(
'description' => 'ZFS Templates',
'fields' => array(
@@ -219,3 +272,50 @@ function jailadmin_update_7002() {

db_create_table('jailadmin_host_cmds', $schema['jailadmin_host_cmds']);
}

/**
* Add support for IP aliases and custom routes
*/
function jailadmin_update_7003() {
db_create_table('jailadmin_routes', drupal_get_schema_unprocessed('jailadmin', 'jailadmin_routes'));
db_create_table('jailadmin_epair_aliases', drupal_get_schema_unprocessed('jailadmin', 'jailadmin_epair_aliases'));
db_create_table('jailadmin_bridge_aliases', drupal_get_schema_unprocessed('jailadmin', 'jailadmin_bridge_aliases'));

/* Port existing records over to new tables */
$result = db_select('jailadmin_epairs', 'je')
->fields('je', array('ip', 'device'))
->execute();

foreach ($result as $record) {
db_insert('jailadmin_epair_aliases')
->fields(array(
'device' => $record->device,
'ip' => $record->ip,
))->execute();
}

$result = db_select('jailadmin_bridges', 'je')
->fields('je', array('ip', 'device'))
->execute();

foreach ($result as $record) {
db_insert('jailadmin_bridge_aliases')
->fields(array(
'device' => $record->device,
'ip' => $record->ip,
))->execute();
}

$result = db_select('jailadmin_jails', 'j')
->fields('j', array('name', 'route'))
->execute();

foreach ($result as $record) {
db_insert('jailadmin_routes')
->fields(array(
'jail' => $record->name,
'source' => 'default',
'destination' => $record->route,
))->execute();
}
}
@@ -48,14 +48,6 @@ function jailadmin_config($form, &$form_state) {
'#markup' => $jail->path,
);

$form['base']['route'] = array(
'#type' => 'textfield',
'#title' => t('Default Route'),
'#size' => 60,
'#disabled' => $jail->IsOnline() || $readonly,
'#default_value' => $jail->route,
);

$form['network_devices'] = array(
'#type' => 'fieldset',
'#title' => t('Network Devices'),
@@ -82,14 +74,6 @@ function jailadmin_config($form, &$form_state) {
'#disabled' => $jail->IsOnline() || $readonly,
);

$form['network_devices']['new_network_ip'] = array(
'#type' => 'textfield',
'#title' => t('New IP'),
'#size' => 60,
'#description' => t('IPv4 or IPv6 IP'),
'#disabled' => $jail->IsOnline() || $readonly,
);

$form['network_devices']['new_network_network'] = array(
'#type' => 'select',
'#title' => 'Network',
@@ -320,14 +304,6 @@ function jailadmin_config_submit($form, &$form_state) {
}

if (isset($form_state['values']['new_network_device']) && strlen($form_state['values']['new_network_device'])) {
if (strlen($form_state['values']['new_network_ip'])) {
if (Network::IsIPAvailable($form_state['values']['new_network_ip']) == FALSE) {
form_set_error('new_network_ip', t('IP not available'));
$form_state['rebuild'] = TRUE;
return;
}
}

if (strlen($form_state['values']['new_network_device'])) {
if (NetworkDevice::IsDeviceAvailable($form_state['values']['new_network_device']) == FALSE) {
form_set_error('new_network_device', t('Device not available'));
@@ -341,13 +317,11 @@ function jailadmin_config_submit($form, &$form_state) {

$network_device->bridge = Network::Load($form_state['values']['new_network_network']);
$network_device->device = $form_state['values']['new_network_device'];
$network_device->ip = $form_state['values']['new_network_ip'];
$network_device->is_span = $form_state['values']['new_network_span'];

$network_device->Create();

$form_state['input']['new_network_device'] = '';
$form_state['input']['new_network_ip'] = '';
}

if (isset($form_state['values']['services'])) {