diff --git a/openbsc/include/openbsc/gtphub.h b/openbsc/include/openbsc/gtphub.h
index cc204ef..2d9d390 100644
--- a/openbsc/include/openbsc/gtphub.h
+++ b/openbsc/include/openbsc/gtphub.h
@@ -141,6 +141,10 @@
 	GTPH_SIDE_N
 };
 
+#define for_each_side(I)	for (I = 0; I < GTPH_SIDE_N; I++)
+#define for_each_plane(I)	for (I = 0; I < GTPH_PLANE_N; I++)
+#define for_each_side_and_plane(I,J)	for_each_side(I) for_each_plane(J)
+
 static inline int other_side_idx(int side_idx)
 {
 	return (side_idx + 1) & 1;
diff --git a/openbsc/src/gprs/gtphub.c b/openbsc/src/gprs/gtphub.c
index db84a00..4f81c01 100644
--- a/openbsc/src/gprs/gtphub.c
+++ b/openbsc/src/gprs/gtphub.c
@@ -1014,13 +1014,11 @@
 		return 0;
 	int side_idx;
 	int plane_idx;
-	for (side_idx = 0; side_idx < GTPH_SIDE_N; side_idx++) {
-		for (plane_idx = 0; plane_idx < GTPH_PLANE_N; plane_idx++) {
-			struct gtphub_tunnel_endpoint *te =
-				&tun->endpoint[side_idx][plane_idx];
-			if (!(te->peer && te->tei_orig && te->tei_repl))
-				return 0;
-		}
+	for_each_side_and_plane(side_idx, plane_idx) {
+		struct gtphub_tunnel_endpoint *te =
+			&tun->endpoint[side_idx][plane_idx];
+		if (!(te->peer && te->tei_orig && te->tei_repl))
+			return 0;
 	}
 	return 1;
 }
@@ -1040,12 +1038,10 @@
 
 	int side_idx;
 	int plane_idx;
-	for (side_idx = 0; side_idx < GTPH_SIDE_N; side_idx++) {
-		for (plane_idx = 0; plane_idx < GTPH_PLANE_N; plane_idx++) {
-			/* clear ref count */
-			gtphub_tunnel_endpoint_set_peer(
-				&tun->endpoint[side_idx][plane_idx], NULL);
-		}
+	for_each_side_and_plane(side_idx, plane_idx) {
+		/* clear ref count */
+		gtphub_tunnel_endpoint_set_peer(&tun->endpoint[side_idx][plane_idx],
+						NULL);
 	}
 
 	talloc_free(tun);
@@ -2077,7 +2073,7 @@
 
 	if (expired) {
 		int i;
-		for (i = 0; i < GTPH_PLANE_N; i++) {
+		for_each_plane(i) {
 			gtphub_gc_bind(&hub->to_sgsns[i]);
 			gtphub_gc_bind(&hub->to_ggsns[i]);
 		}
@@ -2110,7 +2106,7 @@
 	expiry_init(&hub->expire_slowly, GTPH_EXPIRE_SLOWLY_MINUTES * 60);
 
 	int plane_idx;
-	for (plane_idx = 0; plane_idx < GTPH_PLANE_N; plane_idx++) {
+	for_each_plane(plane_idx) {
 		nr_pool_init(&hub->tei_pool[plane_idx], 1, 0xffffffff);
 
 		gtphub_bind_init(&hub->to_ggsns[plane_idx]);
@@ -2135,7 +2131,7 @@
 	expiry_clear(&hub->expire_slowly);
 
 	int plane_idx;
-	for (plane_idx = 0; plane_idx < GTPH_PLANE_N; plane_idx++) {
+	for_each_plane(plane_idx) {
 		gtphub_gc_bind(&hub->to_ggsns[plane_idx]);
 		gtphub_bind_free(&hub->to_ggsns[plane_idx]);
 
@@ -2147,7 +2143,7 @@
 void gtphub_stop(struct gtphub *hub)
 {
 	int plane_idx;
-	for (plane_idx = 0; plane_idx < GTPH_PLANE_N; plane_idx++) {
+	for_each_plane(plane_idx) {
 		gtphub_bind_stop(&hub->to_ggsns[plane_idx]);
 		gtphub_bind_stop(&hub->to_sgsns[plane_idx]);
 	}
@@ -2193,7 +2189,7 @@
 	/* TODO set hub->restart_counter from external file. */
 
 	int plane_idx;
-	for (plane_idx = 0; plane_idx < GTPH_PLANE_N; plane_idx++) {
+	for_each_plane(plane_idx) {
 		rc = gtphub_bind_start(&hub->to_ggsns[plane_idx],
 				       &cfg->to_ggsns[plane_idx],
 				       from_ggsns_read_cb, hub, plane_idx);
@@ -2213,7 +2209,7 @@
 		}
 	}
 
-	for (plane_idx = 0; plane_idx < GTPH_PLANE_N; plane_idx++) {
+	for_each_plane(plane_idx) {
 		if (gtphub_make_proxy(hub,
 				      &hub->sgsn_proxy[plane_idx],
 				      &hub->to_sgsns[plane_idx],
@@ -2235,14 +2231,14 @@
 		}
 	}
 
-	for (plane_idx = 0; plane_idx < GTPH_PLANE_N; plane_idx++) {
+	for_each_plane(plane_idx) {
 		if (hub->sgsn_proxy[plane_idx])
 			LOG(LOGL_NOTICE, "Using SGSN %s proxy %s\n",
 			    gtphub_plane_idx_names[plane_idx],
 			    gtphub_port_str(hub->sgsn_proxy[plane_idx]));
 	}
 
-	for (plane_idx = 0; plane_idx < GTPH_PLANE_N; plane_idx++) {
+	for_each_plane(plane_idx) {
 		if (hub->ggsn_proxy[plane_idx])
 			LOG(LOGL_NOTICE, "Using GGSN %s proxy %s\n",
 			    gtphub_plane_idx_names[plane_idx],
diff --git a/openbsc/src/gprs/gtphub_vty.c b/openbsc/src/gprs/gtphub_vty.c
index f99f818..5e5c1dd 100644
--- a/openbsc/src/gprs/gtphub_vty.c
+++ b/openbsc/src/gprs/gtphub_vty.c
@@ -122,7 +122,7 @@
 	)
 {
 	int i;
-	for (i = 0; i < GTPH_PLANE_N; i++)
+	for_each_plane(i)
 		g_cfg->to_sgsns[i].bind.addr_str = talloc_strdup(tall_vty_ctx, argv[0]);
 	g_cfg->to_sgsns[GTPH_PLANE_CTRL].bind.port = GTPH_DEFAULT_CONTROL_PORT;
 	g_cfg->to_sgsns[GTPH_PLANE_USER].bind.port = GTPH_DEFAULT_USER_PORT;
@@ -137,7 +137,7 @@
 	)
 {
 	int i;
-	for (i = 0; i < GTPH_PLANE_N; i++)
+	for_each_plane(i)
 		g_cfg->to_ggsns[i].bind.addr_str = talloc_strdup(tall_vty_ctx, argv[0]);
 	g_cfg->to_ggsns[GTPH_PLANE_CTRL].bind.port = GTPH_DEFAULT_CONTROL_PORT;
 	g_cfg->to_ggsns[GTPH_PLANE_USER].bind.port = GTPH_DEFAULT_USER_PORT;
@@ -254,7 +254,7 @@
 static void show_bind_stats_all(struct vty *vty)
 {
 	int plane_idx;
-	for (plane_idx = 0; plane_idx < GTPH_PLANE_N; plane_idx++) {
+	for_each_plane(plane_idx) {
 		vty_out(vty, "- %s Plane:%s",
 			gtphub_plane_idx_names[plane_idx], VTY_NEWLINE);
 
