diff --git a/roles/network_plugin/calico/tasks/reset.yml b/roles/network_plugin/calico/tasks/reset.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1cdab1262386ea822b94d8f450bd761fd46703b7
--- /dev/null
+++ b/roles/network_plugin/calico/tasks/reset.yml
@@ -0,0 +1,19 @@
+---
+- name: reset | check dummy0 network device
+  stat:
+    path: /sys/class/net/dummy0
+  register: dummy0
+
+- name: reset | remove the network device created by calico
+  command: ip link del dummy0
+  when: dummy0.stat.exists
+
+- name: reset | get remaining routes set by bird
+  command: ip route show proto bird
+  register: bird_routes
+
+- name: reset | remove remaining routes set by bird
+  command: "ip route del {{ bird_route }} proto bird"
+  with_items: "{{ bird_routes.stdout_lines }}"
+  loop_control:
+    loop_var: bird_route
diff --git a/roles/reset/tasks/main.yml b/roles/reset/tasks/main.yml
index ca54c51c4c55c26e32b14c5152ddfa7b03615113..5c776a3c13ac7f74da82a734dcb3a92ea3673198 100644
--- a/roles/reset/tasks/main.yml
+++ b/roles/reset/tasks/main.yml
@@ -205,7 +205,7 @@
 - name: reset | include file with reset tasks specific to the network_plugin if exists
   include_tasks: "{{ (role_path + '/../network_plugin/' + kube_network_plugin + '/tasks/reset.yml') | realpath  }}"
   when:
-    - kube_network_plugin in ['flannel', 'cilium', 'contiv', 'kube-router']
+    - kube_network_plugin in ['flannel', 'cilium', 'contiv', 'kube-router', 'calico']
   tags:
     - network