--- a/resources/OCF/IPv6addr.c
+++ b/resources/OCF/IPv6addr.c
@@ -146,7 +146,7 @@
 	unsigned int ifr6_ifindex;
 };
 
-static int start_addr6(struct in6_addr* addr6, int prefix_len);
+static int start_addr6(struct in6_addr* addr6, int prefix_len, char* if_name);
 static int stop_addr6(struct in6_addr* addr6, int prefix_len);
 static int status_addr6(struct in6_addr* addr6, int prefix_len);
 static int monitor_addr6(struct in6_addr* addr6, int prefix_len);
@@ -175,6 +175,8 @@
 	char*		ipv6addr;
 	int		ret;
 	char*		cp;
+	char*		cp2;
+	char*		interface = NULL;
 	int		prefix_len;
 	struct in6_addr	addr6;
 
@@ -206,6 +208,10 @@
 		return OCF_ERR_ARGS;
 	}
 	if ((cp = strchr(ipv6addr, '/'))) {
+		if ((cp2 = strchr(cp + 1, '/'))) {
+			interface = cp2 + 1;
+			*cp2 = 0;
+		}
 		prefix_len = atol(cp + 1);
 		if ((prefix_len < 0) || (prefix_len > 128)) {
 			cl_log(LOG_ERR, "Invalid prefix_len [%s], should be an integer in [0, 128]", cp+1);
@@ -245,7 +251,7 @@
 
 	/* switch the command */
 	if (0 == strncmp(START_CMD,argv[1], strlen(START_CMD))) {
-		ret = start_addr6(&addr6, prefix_len);
+		ret = start_addr6(&addr6, prefix_len, interface);
 	}else if (0 == strncmp(STOP_CMD,argv[1], strlen(STOP_CMD))) {
 		ret = stop_addr6(&addr6, prefix_len);
 	}else if (0 == strncmp(STATUS_CMD,argv[1], strlen(STATUS_CMD))) {
@@ -272,10 +278,9 @@
 	return ret;
 }
 int
-start_addr6(struct in6_addr* addr6, int prefix_len)
+start_addr6(struct in6_addr* addr6, int prefix_len, char* if_name)
 {
 	int	i;
-	char*	if_name;
 	pid_t	child;
 
 	if(OCF_SUCCESS == status_addr6(addr6,prefix_len)) {
@@ -283,7 +288,8 @@
 	}
 
 	/* we need to find a proper device to assign the address */
-	if_name = find_if(addr6, &prefix_len);
+	if (NULL == if_name)
+		if_name = find_if(addr6, &prefix_len);
 	if (NULL == if_name) {
 		cl_log(LOG_ERR, "no valid mecahnisms");
 		return OCF_ERR_GENERIC;
