// Copyright 2012 Citrix Systems, Inc. Licensed under the // Apache License, Version 2.0 (the "License"); you may not use this // file except in compliance with the License. Citrix Systems, Inc. // reserves all rights not expressly granted by the License. // You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // // Automatically generated by addcopyright.py at 04/03/2012 package com.cloud.agent.resource.computing; import java.util.ArrayList; import java.util.List; public class LibvirtNetworkDef { enum netType { BRIDGE, NAT, LOCAL } private final String _networkName; private final String _uuid; private netType _networkType; private String _brName; private boolean _stp; private int _delay; private String _fwDev; private final String _domainName; private String _brIPAddr; private String _brNetMask; private final List<IPRange> ipranges = new ArrayList<IPRange>(); private final List<dhcpMapping> dhcpMaps = new ArrayList<dhcpMapping>(); public static class dhcpMapping { String _mac; String _name; String _ip; public dhcpMapping(String mac, String name, String ip) { _mac = mac; _name = name; _ip = ip; } } public static class IPRange { String _start; String _end; public IPRange(String start, String end) { _start = start; _end = end; } } public LibvirtNetworkDef(String netName, String uuid, String domName) { _networkName = netName; _uuid = uuid; _domainName = domName; } public void defNATNetwork(String brName, boolean stp, int delay, String fwNic, String ipAddr, String netMask) { _networkType = netType.NAT; _brName = brName; _stp = stp; _delay = delay; _fwDev = fwNic; _brIPAddr = ipAddr; _brNetMask = netMask; } public void defBrNetwork(String brName, boolean stp, int delay, String fwNic, String ipAddr, String netMask) { _networkType = netType.BRIDGE; _brName = brName; _stp = stp; _delay = delay; _fwDev = fwNic; _brIPAddr = ipAddr; _brNetMask = netMask; } public void defLocalNetwork(String brName, boolean stp, int delay, String ipAddr, String netMask) { _networkType = netType.LOCAL; _brName = brName; _stp = stp; _delay = delay; _brIPAddr = ipAddr; _brNetMask = netMask; } public void adddhcpIPRange(String start, String end) { IPRange ipr = new IPRange(start, end); ipranges.add(ipr); } public void adddhcpMapping(String mac, String host, String ip) { dhcpMapping map = new dhcpMapping(mac, host, ip); dhcpMaps.add(map); } @Override public String toString() { StringBuilder netBuilder = new StringBuilder(); netBuilder.append("<network>\n"); netBuilder.append("<name>" + _networkName + "</name>\n"); if (_uuid != null) netBuilder.append("<uuid>" + _uuid + "</uuid>\n"); if (_brName != null) { netBuilder.append("<bridge name='" + _brName + "'"); if (_stp) { netBuilder.append(" stp='on'"); } else { netBuilder.append(" stp='off'"); } if (_delay != -1) { netBuilder.append(" delay='" + _delay + "'"); } netBuilder.append("/>\n"); } if (_domainName != null) { netBuilder.append("<domain name='" + _domainName + "'/>\n"); } if (_networkType == netType.BRIDGE) { netBuilder.append("<forward mode='route'"); if (_fwDev != null) { netBuilder.append(" dev='" + _fwDev + "'"); } netBuilder.append("/>\n"); } else if (_networkType == netType.NAT) { netBuilder.append("<forward mode='nat'"); if (_fwDev != null) { netBuilder.append(" dev='" + _fwDev + "'"); } netBuilder.append("/>\n"); } if (_brIPAddr != null || _brNetMask != null || !ipranges.isEmpty() || !dhcpMaps.isEmpty()) { netBuilder.append("<ip"); if (_brIPAddr != null) netBuilder.append(" address='" + _brIPAddr + "'"); if (_brNetMask != null) { netBuilder.append(" netmask='" + _brNetMask + "'"); } netBuilder.append(">\n"); if (!ipranges.isEmpty() || !dhcpMaps.isEmpty()) { netBuilder.append("<dhcp>\n"); for (IPRange ip : ipranges) { netBuilder.append("<range start='" + ip._start + "'" + " end='" + ip._end + "'/>\n"); } for (dhcpMapping map : dhcpMaps) { netBuilder.append("<host mac='" + map._mac + "' name='" + map._name + "' ip='" + map._ip + "'/>\n"); } netBuilder.append("</dhcp>\n"); } netBuilder.append("</ip>\n"); } netBuilder.append("</network>\n"); return netBuilder.toString(); } /** * @param args */ public static void main(String[] args) { LibvirtNetworkDef net = new LibvirtNetworkDef("cloudPrivate", null, "cloud.com"); net.defNATNetwork("cloudbr0", false, 0, null, "192.168.168.1", "255.255.255.0"); net.adddhcpIPRange("192.168.168.100", "192.168.168.220"); net.adddhcpIPRange("192.168.168.10", "192.168.168.50"); net.adddhcpMapping("branch0.cloud.com", "00:16:3e:77:e2:ed", "192.168.168.100"); net.adddhcpMapping("branch1.cloud.com", "00:16:3e:77:e2:ef", "192.168.168.101"); net.adddhcpMapping("branch2.cloud.com", "00:16:3e:77:e2:f0", "192.168.168.102"); System.out.println(net.toString()); } }