[nat] Implement the removal of an access-list.
diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h
index 5d28e4c..3b950e1 100644
--- a/openbsc/include/openbsc/bsc_nat.h
+++ b/openbsc/include/openbsc/bsc_nat.h
@@ -326,5 +326,6 @@
 void bsc_parse_reg(void *ctx, regex_t *reg, char **imsi, int argc, const char **argv);
 struct bsc_nat_access_list *bsc_nat_accs_list_find(struct bsc_nat *nat, const char *name);
 struct bsc_nat_access_list *bsc_nat_accs_list_get(struct bsc_nat *nat, const char *name);
+void bsc_nat_accs_list_delete(struct bsc_nat_access_list *lst);
 
 #endif
diff --git a/openbsc/src/nat/bsc_nat_utils.c b/openbsc/src/nat/bsc_nat_utils.c
index ffb37e8..71d5722 100644
--- a/openbsc/src/nat/bsc_nat_utils.c
+++ b/openbsc/src/nat/bsc_nat_utils.c
@@ -443,4 +443,10 @@
 	lst->name = talloc_strdup(lst, name);
 	llist_add(&lst->list, &nat->access_lists);
 	return lst;
+}
+
+void bsc_nat_accs_list_delete(struct bsc_nat_access_list *lst)
+{
+	llist_del(&lst->list);
+	talloc_free(lst);
 }
\ No newline at end of file
diff --git a/openbsc/src/nat/bsc_nat_vty.c b/openbsc/src/nat/bsc_nat_vty.c
index e888dcc..3f2d7ac 100644
--- a/openbsc/src/nat/bsc_nat_vty.c
+++ b/openbsc/src/nat/bsc_nat_vty.c
@@ -413,6 +413,22 @@
 	return CMD_SUCCESS;
 }
 
+/* naming to follow Zebra... */
+DEFUN(cfg_lst_no,
+      cfg_lst_no_cmd,
+      "no access-list NAME",
+      NO_STR "Remove an access-list by name\n"
+      "The access-list to remove\n")
+{
+	struct bsc_nat_access_list *acc;
+	acc = bsc_nat_accs_list_find(_nat, argv[0]);
+	if (!acc)
+		return CMD_WARNING;
+
+	bsc_nat_accs_list_delete(acc);
+	return CMD_SUCCESS;
+}
+
 DEFUN(cfg_bsc_acc_lst_name,
       cfg_bsc_acc_lst_name_cmd,
       "access-list-name NAME",
@@ -507,6 +523,7 @@
 	/* access-list */
 	install_element(NAT_NODE, &cfg_lst_imsi_allow_cmd);
 	install_element(NAT_NODE, &cfg_lst_imsi_deny_cmd);
+	install_element(NAT_NODE, &cfg_lst_no_cmd);
 
 	/* BSC subgroups */
 	install_element(NAT_NODE, &cfg_bsc_cmd);