/*
* Copyright (c) 2012-2015 iWave Software LLC
* All Rights Reserved
*/
package com.iwave.ext.linux.command;
import java.util.List;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
import com.google.common.collect.Lists;
import com.iwave.ext.linux.model.IPInterface;
import com.iwave.ext.text.TextParser;
public class ListIPInterfacesCommand extends LinuxResultsCommand<List<IPInterface>> {
private static final Pattern BLOCK_PATTERN = Pattern.compile("^|[.]*\n\n");
private static final Pattern INTERFACE_NAME = Pattern.compile("^([^ ]+)[ ]");
private static final Pattern ADDRESS_PATTERN = Pattern.compile("addr:([^ ]+)");
private static final Pattern MAC_ADDRESS_PATTERN = Pattern.compile("HWaddr ([^ ]+)");
private static final Pattern MASK_PATTERN = Pattern.compile("Mask:([^ ]+)");
private static final Pattern IP6_ADDRESS = Pattern.compile("inet6 addr: ([^ ]+)");
private static final Pattern BROADCAST_ADDRESS_PATTERN = Pattern.compile("Bcast:([^ ]+)");
public ListIPInterfacesCommand() {
setCommand(CommandConstants.IFCONFIG);
setRunAsRoot(true);
}
@Override
public void parseOutput() {
results = Lists.newArrayList();
if (getOutput() != null && getOutput().getStdout() != null) {
String stdout = getOutput().getStdout();
TextParser parser = new TextParser();
parser.setRepeatPattern(BLOCK_PATTERN);
for (String textBlock : parser.parseTextBlocks(StringUtils.trim(stdout))) {
IPInterface ipInfo = new IPInterface();
String interfaceName = parser.findMatch(INTERFACE_NAME, textBlock);
ipInfo.setInterfaceName(StringUtils.trim(interfaceName));
String ipAddress = parser.findMatch(ADDRESS_PATTERN, textBlock);
ipInfo.setIpAddress(StringUtils.trim(ipAddress));
String macAddress = parser.findMatch(MAC_ADDRESS_PATTERN, textBlock);
ipInfo.setMacAddress(StringUtils.trim(macAddress));
String netMask = parser.findMatch(MASK_PATTERN, textBlock);
ipInfo.setNetMask(StringUtils.trim(netMask));
String ip6Address = parser.findMatch(IP6_ADDRESS, textBlock);
ipInfo.setIP6Address(StringUtils.trim(ip6Address));
String broadcastAddress = parser.findMatch(BROADCAST_ADDRESS_PATTERN, textBlock);
ipInfo.setBroadcastAddress(StringUtils.trim(broadcastAddress));
results.add(ipInfo);
}
}
}
}