diff -rU 2 olsrd-0.6.2-orig/src/link_set.c olsrd-0.6.2/src/link_set.c
--- olsrd-0.6.2-orig/src/link_set.c	2011-10-03 20:12:05.000000000 +0200
+++ olsrd-0.6.2/src/link_set.c	2012-01-23 16:31:22.000000000 +0100
@@ -85,4 +85,43 @@
 }
 
+
+/**
+ * This function resets all the links that depart from interface @param if_name to lost, so
+ * that a hello message can be generated to tell your neighbors that such links
+ * cannot be used anymore.
+ */
+void olsr_reset_all_links_interface(char * if_name){
+  struct link_entry *link;
+
+  
+  OLSR_FOR_ALL_LINK_ENTRIES(link) {
+    
+    if (!strcmp(if_name, link->if_name)){
+    
+      link->ASYM_time = now_times-1;
+
+      olsr_stop_timer(link->link_sym_timer);
+      link->link_sym_timer = NULL;
+
+      link->neighbor->is_mpr = false;
+      link->neighbor->status = NOT_SYM;
+    }
+      
+  } OLSR_FOR_ALL_LINK_ENTRIES_END(link)
+  
+  OLSR_FOR_ALL_LINK_ENTRIES(link) {
+    
+    if (!strcmp(if_name, link->if_name)){
+	olsr_expire_link_sym_timer(link);
+	olsr_clear_hello_lq(link);
+    }
+	
+  } OLSR_FOR_ALL_LINK_ENTRIES_END(link)
+  
+
+  
+}
+
+
 /**
  * This function resets all links to lost, so that
diff -rU 2 olsrd-0.6.2-orig/src/link_set.h olsrd-0.6.2/src/link_set.h
--- olsrd-0.6.2-orig/src/link_set.h	2011-10-03 20:12:05.000000000 +0200
+++ olsrd-0.6.2/src/link_set.h	2012-01-18 18:35:08.000000000 +0100
@@ -123,4 +123,6 @@
 void olsr_init_link_set(void);
 void olsr_reset_all_links(void);
+void olsr_reset_all_links_interface(char * ifname);
+void invalidate_links(char * ifn);
 void olsr_delete_link_entry_by_ip(const union olsr_ip_addr *);
 void olsr_expire_link_hello_timer(void *);
diff -rU 2 olsrd-0.6.2-orig/src/main.c olsrd-0.6.2/src/main.c
--- olsrd-0.6.2-orig/src/main.c	2011-10-03 20:12:05.000000000 +0200
+++ olsrd-0.6.2/src/main.c	2012-01-25 12:41:26.000000000 +0100
@@ -673,4 +673,39 @@
 #endif
 
+
+/**
+ * Set all the links that depart from interface @param str_ifn as not in use (by settink them as lost and removing all the related kernel routes) 
+ * and send an hello message to notify the neighbors that such links cannot be used anymore.
+ */
+void invalidate_links(char * str_ifn) {
+  
+ struct interface *ifn;
+  
+ OLSR_PRINTF(3, "Invalidating link of interface %s.\n", str_ifn);
+  
+ olsr_reset_all_links_interface(str_ifn);
+ 
+ /* delete all routes - is it needed?  */
+ // olsr_delete_all_kernel_routes();
+ 
+ /* send the new HELLO message to invalidate links at the neighbor */
+ for (ifn = ifnet; ifn; ifn = ifn->int_next) {
+
+    if (olsr_cnf->lq_level > 0) {
+      olsr_output_lq_tc(ifn);
+      olsr_output_lq_hello(ifn);
+    } else {
+      generate_tc(ifn);
+      generate_hello(ifn);
+    }
+ 
+    net_output(ifn);
+  }
+ 
+ /* wait for the messages to be sent */
+ usleep(1000000);
+
+}
+
 static void olsr_shutdown_messages(void) {
   struct interface *ifn;
