private void loadConfigurationFile (String configurationFilename) {
		Yaml yaml = new Yaml();

		try {
			mdbytes = getMD5(configurationFilename);
			BufferedReader br = new BufferedReader(new InputStreamReader(
					new FileInputStream(new File(configurationFilename))));
			HashMap<String, List<HashMap<String, Object>>> configurationFile = 
					(HashMap<String, List<HashMap<String, Object>>>) yaml.load(br);

			List<HashMap<String, Object>> list;
			// configuration
			configurationList = new ArrayList<Node>();
			list = configurationFile.get("configuration");    
			for (HashMap<String, Object> nodeInfo : list) {
				Node node = new Node((String)nodeInfo.get("name"), (String)nodeInfo.get("ip"), (Integer)nodeInfo.get("port"));
				configurationList.add(node);
			}
			
			// send rules
			sendRules = new ArrayList<Rule>();
			list = configurationFile.get("sendRules");  
			for (HashMap<String, Object> ruleInfo : list) {
				Rule rule = new Rule((String)ruleInfo.get("action"), (String)ruleInfo.get("src"), (String)ruleInfo.get("dest"), 
						(String)ruleInfo.get("kind"), (Integer)ruleInfo.get("seqNum"), (Boolean)ruleInfo.get("duplicate"));
				sendRules.add(rule);
			}
			// receive rules
			receiveRules  = new ArrayList<Rule>();
			list = configurationFile.get("receiveRules");  
			for (HashMap<String, Object> ruleInfo : list) {
				Rule rule = new Rule((String)ruleInfo.get("action"), (String)ruleInfo.get("src"), (String)ruleInfo.get("dest"), 
						(String)ruleInfo.get("kind"), (Integer)ruleInfo.get("seqNum"), (Boolean)ruleInfo.get("duplicate"));
				receiveRules.add(rule);
			}

            groups = new ArrayList<Group>();
            list = configurationFile.get("groups");
            for (HashMap<String, Object> groupInfo : list) {
                String groupName = (String) groupInfo.get("name");
                List<String> memberInfo = (List<String>) groupInfo.get("members");
                List<Node> memberList = new ArrayList<Node>();
                for (String member : memberInfo) {
                    memberList.add(getConfiguration(member));
                }
                groups.add(new Group(groupName, memberList));
            }

		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchAlgorithmException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}