diff --git a/openbsc/include/openbsc/gtphub.h b/openbsc/include/openbsc/gtphub.h
index bf5bc9e..49d685c 100644
--- a/openbsc/include/openbsc/gtphub.h
+++ b/openbsc/include/openbsc/gtphub.h
@@ -61,7 +61,8 @@
 static inline int osmo_sockaddr_init_udp(struct osmo_sockaddr *addr,
 					 const char *host, uint16_t port)
 {
-	return osmo_sockaddr_init(addr, AF_UNSPEC, SOCK_DGRAM, IPPROTO_UDP, host, port);
+	return osmo_sockaddr_init(addr, AF_UNSPEC, SOCK_DGRAM, IPPROTO_UDP,
+				  host, port);
 }
 
 /*! \brief convert sockaddr to human readable string.
@@ -86,7 +87,7 @@
 			  int flags);
 
 
-/*! \brief conveniently concatenate the parts returned by osmo_sockaddr_to_strs().
+/*! \brief concatenate the parts returned by osmo_sockaddr_to_strs().
  * \param[in] addr  Binary representation as returned by osmo_sockaddr_init().
  * \param[in] buf  A buffer to use for string operations.
  * \param[in] buf_len  Length of the buffer.
@@ -116,11 +117,13 @@
  * \param[in] b  The other address to compare.
  * \returns 0 if equal, otherwise -1 or 1.
  */
-int osmo_sockaddr_cmp(const struct osmo_sockaddr *a, const struct osmo_sockaddr *b);
+int osmo_sockaddr_cmp(const struct osmo_sockaddr *a,
+		      const struct osmo_sockaddr *b);
 
 /*! \brief Overwrite *dst with *src.
  * Like memcpy(), but copy only the valid bytes. */
-void osmo_sockaddr_copy(struct osmo_sockaddr *dst, const struct osmo_sockaddr *src);
+void osmo_sockaddr_copy(struct osmo_sockaddr *dst,
+			const struct osmo_sockaddr *src);
 
 
 /* general */
@@ -179,7 +182,8 @@
 /* Initialize an expiry queue. */
 void expiry_init(struct expiry *exq, int expiry_in_seconds);
 
-/* Add a new mapping, or restart the expiry timeout for an already listed mapping. */
+/* Add a new mapping, or restart the expiry timeout for an already listed
+ * mapping. */
 void expiry_add(struct expiry *exq, struct expiring_item *mapping, time_t now);
 
 /* Initialize to all-empty; must be called before using the item in any way. */
diff --git a/openbsc/src/gprs/gtphub.c b/openbsc/src/gprs/gtphub.c
index 01e3456..e00d6cd 100644
--- a/openbsc/src/gprs/gtphub.c
+++ b/openbsc/src/gprs/gtphub.c
@@ -48,14 +48,16 @@
 #define LOG(level, fmt, args...) \
 	LOGP(DGTPHUB, level, fmt, ##args)
 
-#define ZERO_STRUCT(struct_pointer) memset(struct_pointer, '\0', sizeof(*(struct_pointer)))
+#define ZERO_STRUCT(struct_pointer) memset(struct_pointer, '\0', \
+					   sizeof(*(struct_pointer)))
 
 /* TODO move this to osmocom/core/select.h ? */
 typedef int (*osmo_fd_cb_t)(struct osmo_fd *fd, unsigned int what);
 
 /* TODO move this to osmocom/core/linuxlist.h ? */
 #define __llist_first(head) (((head)->next == (head)) ? NULL : (head)->next)
-#define llist_first(head, type, entry) llist_entry(__llist_first(head), type, entry)
+#define llist_first(head, type, entry) \
+	llist_entry(__llist_first(head), type, entry)
 
 /* TODO move GTP header stuff to openggsn/gtp/ ? See gtp_decaps*() */
 
@@ -122,7 +124,8 @@
 
 	int rc = inet_pton(af, numeric_addr_str, gsna->buf);
 	if (rc != 1) {
-		LOG(LOGL_ERROR, "Cannot resolve numeric address: '%s'\n", numeric_addr_str);
+		LOG(LOGL_ERROR, "Cannot resolve numeric address: '%s'\n",
+		    numeric_addr_str);
 		return -1;
 	}
 	return 0;
@@ -152,7 +155,8 @@
 
 	const char *r = inet_ntop(af, gsna->buf, strbuf, strbuf_len);
 	if (!r) {
-		LOG(LOGL_ERROR, "Cannot convert gsn_addr to string: %s: len=%d, buf=%s\n",
+		LOG(LOGL_ERROR, "Cannot convert gsn_addr to string:"
+		    " %s: len=%d, buf=%s\n",
 		    strerror(errno),
 		    (int)gsna->len,
 		    osmo_hexdump(gsna->buf, sizeof(gsna->buf)));
@@ -171,7 +175,8 @@
 	return (memcmp(a->buf, b->buf, a->len) == 0)? 1 : 0;
 }
 
-static int gsn_addr_get(struct gsn_addr *gsna, const struct gtp_packet_desc *p, int idx)
+static int gsn_addr_get(struct gsn_addr *gsna, const struct gtp_packet_desc *p,
+			int idx)
 {
 	if (p->rc != GTP_RC_PDU_C)
 		return -1;
@@ -186,7 +191,8 @@
 	return 0;
 }
 
-static int gsn_addr_put(const struct gsn_addr *gsna, struct gtp_packet_desc *p, int idx)
+static int gsn_addr_put(const struct gsn_addr *gsna, struct gtp_packet_desc *p,
+			int idx)
 {
 	if (p->rc != GTP_RC_PDU_C)
 		return -1;
@@ -200,7 +206,8 @@
 	struct gtpie_tlv *ie = &p->ie[ie_idx]->tlv;
 	int ie_l = ntoh16(ie->l);
 	if (ie_l != gsna->len) {
-		LOG(LOGL_ERROR, "Not implemented: replace an IE address of different size:"
+		LOG(LOGL_ERROR, "Not implemented:"
+		    " replace an IE address of different size:"
 		    " replace %d with %d\n", (int)ie_l, (int)gsna->len);
 		return -1;
 	}
@@ -238,8 +245,8 @@
 
 	/* Check packet length field versus length of packet */
 	if (p->data_len != (ntoh16(pheader->length) + GTP0_HEADER_SIZE)) {
-		LOG(LOGL_ERROR, "GTP packet length field (%d + %d) does not match"
-		    " actual length (%d)\n",
+		LOG(LOGL_ERROR, "GTP packet length field (%d + %d) does not"
+		    " match actual length (%d)\n",
 		    GTP0_HEADER_SIZE, (int)ntoh16(pheader->length),
 		    p->data_len);
 		p->rc = GTP_RC_TOOSHORT;
@@ -294,9 +301,10 @@
 	}
 
 	/* Check packet length field versus length of packet */
-	if (p->data_len != (ntoh16(pheader->length) + GTP1_HEADER_SIZE_SHORT)) {
-		LOG(LOGL_ERROR, "GTP packet length field (%d + %d) does not match"
-		    " actual length (%d)\n",
+	int announced_len = ntoh16(pheader->length) + GTP1_HEADER_SIZE_SHORT;
+	if (p->data_len != announced_len) {
+		LOG(LOGL_ERROR, "GTP packet length field (%d + %d) does not"
+		    " match actual length (%d)\n",
 		    GTP1_HEADER_SIZE_SHORT, (int)ntoh16(pheader->length),
 		    p->data_len);
 		p->rc = GTP_RC_TOOSHORT;
@@ -316,7 +324,8 @@
 
 	/* Need at least 1 byte in order to check version */
 	if (p->data_len < 1) {
-		LOG(LOGL_ERROR, "Discarding packet - too small: %d\n", p->data_len);
+		LOG(LOGL_ERROR, "Discarding packet - too small: %d\n",
+		    p->data_len);
 		p->rc = GTP_RC_TOOSHORT;
 		return;
 	}
@@ -387,7 +396,8 @@
 
 /* Return 0 if not present, 1 if present and decoded successfully, -1 if
  * present but cannot be decoded. */
-static int get_ie_imsi_str(union gtpie_member *ie[], int i, const char **imsi_str)
+static int get_ie_imsi_str(union gtpie_member *ie[], int i,
+			   const char **imsi_str)
 {
 	uint8_t imsi_buf[8];
 	if (!get_ie_imsi(ie, i, imsi_buf))
@@ -460,12 +470,14 @@
 			 (void*)(data + res->header_len),
 			 res->data_len - res->header_len) != 0) {
 		res->rc = GTP_RC_INVALID_IE;
-		LOG(LOGL_ERROR, "INVALID: cannot decode IEs. Dropping GTP packet.\n");
+		LOG(LOGL_ERROR, "INVALID: cannot decode IEs."
+		    " Dropping GTP packet.\n");
 		return;
 	}
 
 #if 1
-	/* TODO if (<loglevel is debug>) { ...  (waiting for a commit from jerlbeck) */
+	/* TODO if (<loglevel is debug>) { ...
+	   (waiting for a commit from jerlbeck) */
 	int i;
 
 	for (i = 0; i < 10; i++) {
@@ -778,13 +790,14 @@
 		       struct osmo_sockaddr *from_addr,
 		       uint8_t *buf, size_t buf_len)
 {
-	/* recvfrom requires the available length to be set in *from_addr_len. */
+	/* recvfrom requires the available length set in *from_addr_len. */
 	if (from_addr)
 		from_addr->l = sizeof(from_addr->a);
 
 	errno = 0;
 	ssize_t received = recvfrom(from->fd, buf, buf_len, 0,
-				    (struct sockaddr*)&from_addr->a, &from_addr->l);
+				    (struct sockaddr*)&from_addr->a,
+				    &from_addr->l);
 	/* TODO use recvmsg and get a MSG_TRUNC flag to make sure the message
 	 * is not truncated. Then maybe reduce buf's size. */
 
@@ -798,7 +811,8 @@
 		LOG(LOGL_DEBUG, "from %s\n", osmo_sockaddr_to_str(from_addr));
 	}
 
-	LOG(LOGL_DEBUG, "Received %d\n", (int)received); //%s\n", (int)received, osmo_hexdump(buf, received));
+	LOG(LOGL_DEBUG, "Received %d %s\n",
+	    (int)received, osmo_hexdump(buf, received));
 	return received;
 }
 
@@ -841,7 +855,8 @@
 	return nrm;
 }
 
-static const char *gtphub_peer_strb(struct gtphub_peer *peer, char *buf, int buflen)
+static const char *gtphub_peer_strb(struct gtphub_peer *peer, char *buf,
+				    int buflen)
 {
 	if (llist_empty(&peer->addresses))
 		return "(addressless)";
@@ -852,7 +867,8 @@
 	return gsn_addr_to_strb(&a->addr, buf, buflen);
 }
 
-static const char *gtphub_port_strb(struct gtphub_peer_port *port, char *buf, int buflen)
+static const char *gtphub_port_strb(struct gtphub_peer_port *port, char *buf,
+				    int buflen)
 {
 	if (!port)
 		return "(null port)";
@@ -974,11 +990,13 @@
 						 struct gtphub_peer_port *responding_port)
 {
 	OSMO_ASSERT(p->version == 1);
-	struct nr_mapping *nrm = nr_map_get_inv(&responding_port->peer_addr->peer->seq_map,
-						p->seq);
+	struct nr_mapping *nrm =
+		nr_map_get_inv(&responding_port->peer_addr->peer->seq_map,
+			       p->seq);
 	if (!nrm)
 		return NULL;
-	LOG(LOGL_DEBUG, "peer %p: sequence unmap %d <-- %d\n", nrm->origin, (int)(nrm->orig), (int)(nrm->repl));
+	LOG(LOGL_DEBUG, "peer %p: sequence unmap %d <-- %d\n",
+	    nrm->origin, (int)(nrm->orig), (int)(nrm->repl));
 	set_seq(p, nrm->orig);
 	return nrm->origin;
 }
@@ -1160,8 +1178,10 @@
 		ie_idx = gtpie_getie(p->ie, ie_type[plane_idx], 0);
 		if (ie_idx < 0) {
 			if (ie_mandatory) {
-				LOG(LOGL_ERROR, "Create PDP Context message invalid:"
-				    " missing IE %d\n", (int)ie_type[plane_idx]);
+				LOG(LOGL_ERROR,
+				    "Create PDP Context message invalid:"
+				    " missing IE %d\n",
+				    (int)ie_type[plane_idx]);
 				return -1;
 			}
 			tei_from_ie = 0;
@@ -1216,9 +1236,11 @@
 	}
 
 	if (sent != buf_len)
-		LOG(LOGL_ERROR, "sent(%d) != data_len(%d)\n", (int)sent, (int)buf_len);
+		LOG(LOGL_ERROR, "sent(%d) != data_len(%d)\n",
+		    (int)sent, (int)buf_len);
 	else
-		LOG(LOGL_DEBUG, "Sent %d\n%s\n", (int)sent, osmo_hexdump(buf, sent));
+		LOG(LOGL_DEBUG, "Sent %d\n%s\n",
+		    (int)sent, osmo_hexdump(buf, sent));
 
 	return 0;
 }
@@ -1227,7 +1249,8 @@
 {
 	unsigned int plane_idx = from_ggsns_ofd->priv_nr;
 	OSMO_ASSERT(plane_idx < GTPH_PLANE_N);
-	LOG(LOGL_DEBUG, "\n\n=== reading from GGSN (%s)\n", gtphub_plane_idx_names[plane_idx]);
+	LOG(LOGL_DEBUG, "\n\n=== reading from GGSN (%s)\n",
+	    gtphub_plane_idx_names[plane_idx]);
 	if (!(what & BSC_FD_READ))
 		return 0;
 
@@ -1283,7 +1306,9 @@
 
 	struct gtphub_peer *from_peer = from->peer_addr->peer;
 	if (from_seq && from_tei && (from_seq != from_tei)) {
-		LOG(LOGL_DEBUG, "Seq unmap and TEI unmap yield two different peers. Using seq unmap."
+		LOG(LOGL_DEBUG,
+		    "Seq unmap and TEI unmap yield two different peers."
+		    " Using seq unmap."
 		    "(from %s %s: seq %d yields %s, tei %u yields %s)\n",
 		    gtphub_plane_idx_names[p->plane_idx],
 		    gtphub_peer_str(from_peer),
@@ -1296,7 +1321,9 @@
 	unmapped = (from_seq? from_seq : from_tei);
 
 	if (unmapped && to_proxy && (unmapped != to_proxy)) {
-		LOG(LOGL_NOTICE, "Unmap yields a different peer than the configured proxy. Using proxy."
+		LOG(LOGL_NOTICE,
+		    "Unmap yields a different peer than the configured proxy."
+		    " Using proxy."
 		    " unmapped: %s  proxy: %s\n",
 		    gtphub_port_str(unmapped),
 		    gtphub_port_str2(to_proxy)
@@ -1331,7 +1358,8 @@
 /* If p is an Echo request, replace p's data with the matching response and
  * return 1. If p is no Echo request, return 0, or -1 if an invalid packet is
  * detected. */
-static int gtphub_handle_echo(struct gtphub *hub, struct gtp_packet_desc *p, uint8_t **reply_buf)
+static int gtphub_handle_echo(struct gtphub *hub, struct gtp_packet_desc *p,
+			      uint8_t **reply_buf)
 {
 	if (p->type != GTP_ECHO_REQ)
 		return 0;
@@ -1404,7 +1432,8 @@
 	struct gtphub_peer_port *ggsn = hub->ggsn_proxy[plane_idx];
 	if (ggsn) {
 		if (osmo_sockaddr_cmp(&ggsn->sa, from_addr) != 0) {
-			LOG(LOGL_ERROR, "Rejecting: GGSN proxy configured, but GTP packet"
+			LOG(LOGL_ERROR,
+			    "Rejecting: GGSN proxy configured, but GTP packet"
 			    " received on GGSN bind is from another sender:"
 			    " proxy: %s  sender: %s\n",
 			    gtphub_port_str(ggsn),
@@ -1450,8 +1479,9 @@
 	}
 
 	if (plane_idx == GTPH_PLANE_CTRL) {
-		/* This may be a Create PDP Context response. If it is, there are other
-		 * addresses in the GTP message to set up apart from the sender. */
+		/* This may be a Create PDP Context response. If it is, there
+		 * are other addresses in the GTP message to set up apart from
+		 * the sender. */
 		if (gtphub_handle_pdp_ctx_ies(hub, hub->to_ggsns,
 					      hub->to_sgsns, &p, now)
 		    != 0)
@@ -1480,7 +1510,8 @@
 {
 	unsigned int plane_idx = from_sgsns_ofd->priv_nr;
 	OSMO_ASSERT(plane_idx < GTPH_PLANE_N);
-	LOG(LOGL_DEBUG, "\n\n=== reading from SGSN (%s)\n", gtphub_plane_idx_names[plane_idx]);
+	LOG(LOGL_DEBUG, "\n\n=== reading from SGSN (%s)\n",
+	    gtphub_plane_idx_names[plane_idx]);
 
 	if (!(what & BSC_FD_READ))
 		return 0;
@@ -1547,7 +1578,8 @@
 	struct gtphub_peer_port *sgsn = hub->sgsn_proxy[plane_idx];
 	if (sgsn) {
 		if (osmo_sockaddr_cmp(&sgsn->sa, from_addr) != 0) {
-			LOG(LOGL_ERROR, "Rejecting: GGSN proxy configured, but GTP packet"
+			LOG(LOGL_ERROR,
+			    "Rejecting: GGSN proxy configured, but GTP packet"
 			    " received on GGSN bind is from another sender:"
 			    " proxy: %s  sender: %s\n",
 			    gtphub_port_str(sgsn),
@@ -1568,7 +1600,9 @@
 		 * first contact without being known yet, so create the peer
 		 * struct for the current sender. */
 		if (plane_idx != GTPH_PLANE_CTRL) {
-			LOG(LOGL_ERROR, "User plane peer was not announced by PDP Context, discarding: %s\n",
+			LOG(LOGL_ERROR,
+			    "User plane peer was not announced by PDP Context,"
+			    " discarding: %s\n",
 			    osmo_sockaddr_to_str(from_addr));
 			return -1;
 		}
@@ -1583,7 +1617,8 @@
 	}
 
 	if (!sgsn) {
-		/* This could theoretically happen for invalid address data or somesuch. */
+		/* This could theoretically happen for invalid address data or
+		 * somesuch. */
 		LOG(LOGL_ERROR, "Dropping packet: invalid SGSN peer: %s\n",
 		    osmo_sockaddr_to_str(from_addr));
 		return -1;
@@ -1612,8 +1647,9 @@
 	}
 
 	if (plane_idx == GTPH_PLANE_CTRL) {
-		/* This may be a Create PDP Context requst. If it is, there are other
-		 * addresses in the GTP message to set up apart from the sender. */
+		/* This may be a Create PDP Context requst. If it is, there are
+		 * other addresses in the GTP message to set up apart from the
+		 * sender. */
 		if (gtphub_handle_pdp_ctx_ies(hub, hub->to_sgsns,
 					      hub->to_ggsns, &p, now)
 		    != 0)
@@ -1660,7 +1696,8 @@
 	struct gtphub_resolved_ggsn *ggsn;
 
 	LOG(LOGL_DEBUG, "Resolved GGSN callback: %s %s\n",
-	    apn_oi_str, osmo_hexdump((unsigned char*)resolved_addr, sizeof(*resolved_addr)));
+	    apn_oi_str, osmo_hexdump((unsigned char*)resolved_addr,
+				     sizeof(*resolved_addr)));
 
 	pp = gtphub_port_have(hub, &hub->to_ggsns[GTPH_PLANE_CTRL],
 			      resolved_addr, 2123);
@@ -1767,7 +1804,8 @@
 	gtphub_zero(hub);
 
 	expiry_init(&hub->expire_seq_maps, GTPH_SEQ_MAPPING_EXPIRY_SECS);
-	expiry_init(&hub->expire_tei_maps, GTPH_TEI_MAPPING_EXPIRY_MINUTES * 60);
+	expiry_init(&hub->expire_tei_maps,
+		    GTPH_TEI_MAPPING_EXPIRY_MINUTES * 60);
 
 	int plane_idx;
 	for (plane_idx = 0; plane_idx < GTPH_PLANE_N; plane_idx++) {
@@ -1842,7 +1880,8 @@
 				      &hub->to_sgsns[plane_idx],
 				      &cfg->sgsn_proxy[plane_idx])
 		    != 0) {
-			LOG(LOGL_FATAL, "Cannot configure SGSN proxy %s port %d.\n",
+			LOG(LOGL_FATAL, "Cannot configure SGSN proxy",
+			    " %s port %d.\n",
 			    cfg->sgsn_proxy[plane_idx].addr_str,
 			    (int)cfg->sgsn_proxy[plane_idx].port);
 			return -1;
@@ -1932,7 +1971,8 @@
 static struct gtphub_peer *gtphub_peer_new(struct gtphub *hub,
 					   struct gtphub_bind *bind)
 {
-	struct gtphub_peer *peer = talloc_zero(osmo_gtphub_ctx, struct gtphub_peer);
+	struct gtphub_peer *peer = talloc_zero(osmo_gtphub_ctx,
+					       struct gtphub_peer);
 	OSMO_ASSERT(peer);
 
 	INIT_LLIST_HEAD(&peer->addresses);
@@ -2078,8 +2118,9 @@
 
 
 /* TODO move to osmocom/core/socket.c ? */
-/* The caller is required to call freeaddrinfo(*result), iff zero is returned. */
 /* use this in osmo_sock_init() to remove dup. */
+/* Internal: call getaddrinfo for osmo_sockaddr_init(). The caller is required
+   to call freeaddrinfo(*result), iff zero is returned. */
 static int _osmo_getaddrinfo(struct addrinfo **result,
 			     uint16_t family, uint16_t type, uint8_t proto,
 			     const char *host, uint16_t port)
@@ -2139,7 +2180,8 @@
        }
 
        if (addr->l > sizeof(addr->a)) {
-	       LOGP(DGTPHUB, LOGL_ERROR, "Invalid address: too long: %d\n", addr->l);
+	       LOGP(DGTPHUB, LOGL_ERROR, "Invalid address: too long: %d\n",
+		    addr->l);
 	       return -1;
        }
 
@@ -2149,8 +2191,9 @@
 			flags);
 
        if (rc)
-	       LOGP(DGTPHUB, LOGL_ERROR, "Invalid address: %s: %s\n", gai_strerror(rc),
-		    osmo_hexdump((uint8_t*)&addr->a, addr->l));
+	       LOGP(DGTPHUB, LOGL_ERROR, "Invalid address: %s: %s\n",
+		    gai_strerror(rc), osmo_hexdump((uint8_t*)&addr->a,
+						   addr->l));
 
        return rc;
 }
@@ -2186,7 +2229,8 @@
 	return result;
 }
 
-int osmo_sockaddr_cmp(const struct osmo_sockaddr *a, const struct osmo_sockaddr *b)
+int osmo_sockaddr_cmp(const struct osmo_sockaddr *a,
+		      const struct osmo_sockaddr *b)
 {
 	if (a == b)
 		return 0;
@@ -2209,7 +2253,8 @@
 	return memcmp(&a->a, &b->a, a->l);
 }
 
-void osmo_sockaddr_copy(struct osmo_sockaddr *dst, const struct osmo_sockaddr *src)
+void osmo_sockaddr_copy(struct osmo_sockaddr *dst,
+			const struct osmo_sockaddr *src)
 {
 	OSMO_ASSERT(src->l <= sizeof(dst->a));
 	memcpy(&dst->a, &src->a, src->l);
diff --git a/openbsc/src/gprs/gtphub_ext.c b/openbsc/src/gprs/gtphub_ext.c
index 81c4c12..5ed15fc 100644
--- a/openbsc/src/gprs/gtphub_ext.c
+++ b/openbsc/src/gprs/gtphub_ext.c
@@ -61,10 +61,12 @@
 
 static int start_ares_query(struct ggsn_lookup *lookup);
 
-static void ggsn_lookup_cb(void *arg, int status, int timeouts, struct hostent *hostent)
+static void ggsn_lookup_cb(void *arg, int status, int timeouts,
+			   struct hostent *hostent)
 {
 	struct ggsn_lookup *lookup = arg;
-	LOGP(DGTPHUB, LOGL_NOTICE, "ggsn_lookup_cb(%p / %p)", lookup, &lookup->expiry_entry);
+	LOGP(DGTPHUB, LOGL_NOTICE, "ggsn_lookup_cb(%p / %p)", lookup,
+	     &lookup->expiry_entry);
 
 	if (status != ARES_SUCCESS) {
 		LOGP(DGTPHUB, LOGL_ERROR, "DNS query failed.\n");
@@ -76,7 +78,8 @@
 				return;
 		}
 
-		LOGP(DGTPHUB, LOGL_ERROR, "Failed to resolve GGSN. (%p)\n", lookup);
+		LOGP(DGTPHUB, LOGL_ERROR, "Failed to resolve GGSN. (%p)\n",
+		     lookup);
 		goto remove_from_queue;
 	}
 
@@ -98,13 +101,15 @@
 	resolved_addr.len = hostent->h_length;
 
 	LOGP(DGTPHUB, LOGL_NOTICE, "resolved addr %s\n",
-	     osmo_hexdump((unsigned char*)&resolved_addr, sizeof(resolved_addr)));
+	     osmo_hexdump((unsigned char*)&resolved_addr,
+			  sizeof(resolved_addr)));
 
 	gtphub_resolved_ggsn(lookup->hub, lookup->apn_oi_str, &resolved_addr,
 			     gtphub_now());
 
 remove_from_queue:
-	LOGP(DGTPHUB, LOGL_ERROR, "Removing GGSN lookup. (%p / %p)\n", lookup, &lookup->expiry_entry);
+	LOGP(DGTPHUB, LOGL_ERROR, "Removing GGSN lookup. (%p / %p)\n", lookup,
+	     &lookup->expiry_entry);
 	expiring_item_del(&lookup->expiry_entry);
 }
 
@@ -120,9 +125,11 @@
 
 static int start_ares_query(struct ggsn_lookup *lookup)
 {
-	LOGP(DGTPHUB, LOGL_DEBUG, "Going to query %s (%p / %p)\n", lookup->apn_oi_str, lookup, &lookup->expiry_entry);
+	LOGP(DGTPHUB, LOGL_DEBUG, "Going to query %s (%p / %p)\n",
+	     lookup->apn_oi_str, lookup, &lookup->expiry_entry);
 
-	int rc = sgsn_ares_query(sgsn, lookup->apn_oi_str, ggsn_lookup_cb, lookup);
+	int rc = sgsn_ares_query(sgsn, lookup->apn_oi_str, ggsn_lookup_cb,
+				 lookup);
 	if (rc != 0)
 		LOGP(DGTPHUB, LOGL_ERROR, "Failed to start ares query.\n");
 	return rc;
@@ -133,7 +140,8 @@
 	struct ggsn_lookup *lookup;
 	lookup = container_of(expi, struct ggsn_lookup, expiry_entry);
 
-	LOGP(DGTPHUB, LOGL_NOTICE, "ggsn_lookup_del_cb(%p / %p)\n", lookup, expi);
+	LOGP(DGTPHUB, LOGL_NOTICE, "ggsn_lookup_del_cb(%p / %p)\n", lookup,
+	     expi);
 
 	lookup->expiry_entry.del_cb = 0;
 	expiring_item_del(expi);
@@ -149,10 +157,12 @@
 	OSMO_ASSERT(imsi_str);
 	OSMO_ASSERT(apn_ni_str);
 
-	struct ggsn_lookup *lookup = talloc_zero(osmo_gtphub_ctx, struct ggsn_lookup);
+	struct ggsn_lookup *lookup = talloc_zero(osmo_gtphub_ctx,
+						 struct ggsn_lookup);
 	OSMO_ASSERT(lookup);
 
-	LOGP(DGTPHUB, LOGL_NOTICE, "Request to resolve IMSI '%s' with APN-NI '%s' (%p / %p)\n",
+	LOGP(DGTPHUB, LOGL_NOTICE, "Request to resolve IMSI"
+	     " '%s' with APN-NI '%s' (%p / %p)\n",
 	     imsi_str, apn_ni_str, lookup, &lookup->expiry_entry);
 
 	expiring_item_init(&lookup->expiry_entry);
diff --git a/openbsc/tests/gtphub/gtphub_test.c b/openbsc/tests/gtphub/gtphub_test.c
index fc73570..8434f61 100644
--- a/openbsc/tests/gtphub/gtphub_test.c
+++ b/openbsc/tests/gtphub/gtphub_test.c
@@ -37,12 +37,14 @@
 
 #define EXPIRE_ALL ((60 * GTPH_TEI_MAPPING_EXPIRY_MINUTES) + 1)
 
-#define ZERO_STRUCT(struct_pointer) memset(struct_pointer, '\0', sizeof(*(struct_pointer)))
+#define ZERO_STRUCT(struct_pointer) memset(struct_pointer, '\0', \
+					   sizeof(*(struct_pointer)))
 
 #define LVL2_ASSERT(exp) LVL2_ASSERT_R(exp, return 0)
 #define LVL2_ASSERT_R(exp, ret)    \
 	if (!(exp)) { \
-		fprintf(stderr, "LVL2 Assert failed %s %s:%d\n", #exp, __FILE__, __LINE__); \
+		fprintf(stderr, "LVL2 Assert failed %s %s:%d\n", #exp, \
+			__FILE__, __LINE__); \
 		osmo_generate_backtrace(); \
 		ret; \
 	}
@@ -85,7 +87,8 @@
 	return m;
 }
 
-static struct nr_mapping *nr_map_have(struct nr_map *map, void *origin, nr_t orig, time_t now)
+static struct nr_mapping *nr_map_have(struct nr_map *map, void *origin,
+				      nr_t orig, time_t now)
 {
 	struct nr_mapping *mapping;
 
@@ -100,7 +103,8 @@
 	return mapping;
 }
 
-static nr_t nr_map_verify(const struct nr_map *map, void *origin, nr_t orig, nr_t expect_repl)
+static nr_t nr_map_verify(const struct nr_map *map, void *origin, nr_t orig,
+			  nr_t expect_repl)
 {
 	struct nr_mapping *m;
 	m = nr_map_get(map, origin, orig);
@@ -130,7 +134,8 @@
 	}
 
 	if (m->origin != expect_origin) {
-		printf("mapping found, but origin mismatches: expect %p, got %p\n",
+		printf("mapping found, but origin mismatches:"
+		       " expect %p, got %p\n",
 		       expect_origin, m->origin);
 		return 0;
 	}
@@ -197,12 +202,14 @@
 		nr_t orig = TEST_I + i;
 		{
 			OSMO_ASSERT(nr_map_verify(map, origin1, orig, m[i]));
-			OSMO_ASSERT(nr_map_verify_inv(map, m[i], origin1, orig));
+			OSMO_ASSERT(nr_map_verify_inv(map, m[i], origin1,
+						      orig));
 		}
 		{
 			int i2 = TEST_N_HALF + i;
 			OSMO_ASSERT(nr_map_verify(map, origin2, orig, m[i2]));
-			OSMO_ASSERT(nr_map_verify_inv(map, m[i2], origin2, orig));
+			OSMO_ASSERT(nr_map_verify_inv(map, m[i2], origin2,
+						      orig));
 		}
 	}
 
@@ -401,14 +408,16 @@
 	       imsi_str, apn_ni_str, gtphub_port_str(pp));
 
 	if (imsi_str) {
-		strncpy(resolve_ggsn_got_imsi, imsi_str, sizeof(resolve_ggsn_got_imsi));
+		strncpy(resolve_ggsn_got_imsi, imsi_str,
+			sizeof(resolve_ggsn_got_imsi));
 		resolve_ggsn_got_imsi[sizeof(resolve_ggsn_got_imsi) - 1] = '\0';
 	}
 	else
 		strcpy(resolve_ggsn_got_imsi, "(null)");
 
 	if (apn_ni_str) {
-		strncpy(resolve_ggsn_got_ni, apn_ni_str, sizeof(resolve_ggsn_got_ni));
+		strncpy(resolve_ggsn_got_ni, apn_ni_str,
+			sizeof(resolve_ggsn_got_ni));
 		resolve_ggsn_got_ni[sizeof(resolve_ggsn_got_ni) - 1] = '\0';
 	}
 	else
@@ -418,9 +427,11 @@
 }
 
 #define was_resolved_for(IMSI,NI) _was_resolved_for(IMSI, NI, __FILE__, __LINE__)
-static int _was_resolved_for(const char *imsi, const char *ni, const char *file, int line)
+static int _was_resolved_for(const char *imsi, const char *ni, const char
+			     *file, int line)
 {
-	int cmp0 = strncmp(imsi, resolve_ggsn_got_imsi, sizeof(resolve_ggsn_got_imsi));
+	int cmp0 = strncmp(imsi, resolve_ggsn_got_imsi,
+			   sizeof(resolve_ggsn_got_imsi));
 
 	if (cmp0 != 0) {
 		printf("\n%s:%d: was_resolved_for(): MISMATCH for IMSI\n"
@@ -431,7 +442,8 @@
 		       imsi, resolve_ggsn_got_imsi);
 	}
 
-	int cmp1 = strncmp(ni, resolve_ggsn_got_ni, sizeof(resolve_ggsn_got_ni));
+	int cmp1 = strncmp(ni, resolve_ggsn_got_ni,
+			   sizeof(resolve_ggsn_got_ni));
 	if (cmp1 != 0) {
 		printf("\n%s:%d: was_resolved_for(): MISMATCH for NI\n"
 		       "  expecting: '%s'\n"
@@ -557,7 +569,7 @@
 	now = 123;
 
 	const char *gtp_ping_from_sgsn =
-		"32"	/* 0b001'1 0010: version 1, protocol GTP, with seq nr. */
+		"32"	/* 0b001'1 0010: version 1, protocol GTP, with seq nr */
 		"01"	/* type 01: Echo request */
 		"0004"	/* length of 4 after header TEI */
 		"00000000" /* header TEI == 0 in Echo */
@@ -593,7 +605,7 @@
 	OSMO_ASSERT(!sgsn_port);
 
 	const char *gtp_ping_from_ggsn =
-		"32"	/* 0b001'1 0010: version 1, protocol GTP, with seq nr. */
+		"32"	/* 0b001'1 0010: version 1, protocol GTP, with seq nr */
 		"01"	/* type 01: Echo request */
 		"0004"	/* length of 4 after header TEI */
 		"00000000" /* header TEI == 0 in Echo */
@@ -747,26 +759,28 @@
 
 static int create_pdp_ctx()
 {
-	const char *gtp_req_from_sgsn = MSG_PDP_CTX_REQ("0068",
-							"abcd",
-							"60",
-							"42000121436587f9",
-							"00000123",
-							"00000321",
-							"0009""08696e7465726e6574", /* "(8)internet" */
-							"0004""c0a82a17", /* same as default sgsn_sender */
-							"0004""c0a82a17"
-						       );
-	const char *gtp_req_to_ggsn = MSG_PDP_CTX_REQ("0068",
-						      "6d31",	/* mapped seq ("abcd") */
-						      "60",
-						      "42000121436587f9",
-						      "00000001", /* mapped TEI Data I ("123") */
-						      "00000001", /* mapped TEI Control ("321") */
-						      "0009""08696e7465726e6574",
-						      "0004""7f000201", /* replaced with gtphub's address ggsn ctrl */
-						      "0004""7f000202" /* replaced with gtphub's address ggsn user */
-						     );
+	const char *gtp_req_from_sgsn =
+		MSG_PDP_CTX_REQ("0068",
+				"abcd",
+				"60",
+				"42000121436587f9",
+				"00000123",
+				"00000321",
+				"0009""08696e7465726e6574", /* "(8)internet" */
+				"0004""c0a82a17", /* same as default sgsn_sender */
+				"0004""c0a82a17"
+			       );
+	const char *gtp_req_to_ggsn =
+		MSG_PDP_CTX_REQ("0068",
+				"6d31",	/* mapped seq ("abcd") */
+				"60",
+				"42000121436587f9",
+				"00000001", /* mapped TEI Data I ("123") */
+				"00000001", /* mapped TEI Control ("321") */
+				"0009""08696e7465726e6574",
+				"0004""7f000201", /* replaced with gtphub's ggsn ctrl */
+				"0004""7f000202" /* replaced with gtphub's ggsn user */
+			       );
 
 	LVL2_ASSERT(msg_from_sgsn_c(&sgsn_sender,
 				    &resolved_ggsn_addr,
@@ -774,24 +788,26 @@
 				    gtp_req_to_ggsn));
 	LVL2_ASSERT(was_resolved_for("240010123456789", "internet"));
 
-	const char *gtp_resp_from_ggsn = MSG_PDP_CTX_RSP("004e",
-							 "00000001", /* destination TEI (sent in req above) */
-							 "6d31", /* mapped seq */
-							 "01", /* restart */
-							 "00000567", /* TEI U */
-							 "00000765", /* TEI C */
-							 "0004""c0a82b22", /* GSN addresses */
-							 "0004""c0a82b22"  /* (== resolved_ggsn_addr) */
-							);
-	const char *gtp_resp_to_sgsn = MSG_PDP_CTX_RSP("004e",
-						       "00000321", /* unmapped TEI ("001") */
-						       "abcd", /* unmapped seq ("6d31") */
-						       "01",
-						       "00000002", /* mapped TEI from GGSN ("567") */
-						       "00000002", /* mapped TEI from GGSN ("765") */
-						       "0004""7f000101", /* gtphub's address towards SGSNs (Ctrl) */
-						       "0004""7f000102" /* gtphub's address towards SGSNs (User) */
-						      );
+	const char *gtp_resp_from_ggsn =
+		MSG_PDP_CTX_RSP("004e",
+				"00000001", /* destination TEI (sent in req above) */
+				"6d31", /* mapped seq */
+				"01", /* restart */
+				"00000567", /* TEI U */
+				"00000765", /* TEI C */
+				"0004""c0a82b22", /* GSN addresses */
+				"0004""c0a82b22"  /* (== resolved_ggsn_addr) */
+			       );
+	const char *gtp_resp_to_sgsn =
+		MSG_PDP_CTX_RSP("004e",
+				"00000321", /* unmapped TEI ("001") */
+				"abcd", /* unmapped seq ("6d31") */
+				"01",
+				"00000002", /* mapped TEI from GGSN ("567") */
+				"00000002", /* mapped TEI from GGSN ("765") */
+				"0004""7f000101", /* gtphub's address towards SGSNs (Ctrl) */
+				"0004""7f000102" /* gtphub's address towards SGSNs (User) */
+			       );
 	/* The response should go back to whichever port the request came from
 	 * (unmapped by sequence nr) */
 	LVL2_ASSERT(msg_from_ggsn_c(&resolved_ggsn_addr,
@@ -826,8 +842,10 @@
 	 * 0x00000765 == 1893 (TEI from GGSN Ctrl)
 	 * 0x00000567 == 1383 (TEI from GGSN User)
 	 * Mapped TEIs should be 1 and 2. */
-	OSMO_ASSERT(nr_map_is(&hub->tei_map[GTPH_PLANE_CTRL], "(801->1@21945), (1893->2@21945), "));
-	OSMO_ASSERT(nr_map_is(&hub->tei_map[GTPH_PLANE_USER], "(291->1@21945), (1383->2@21945), "));
+	OSMO_ASSERT(nr_map_is(&hub->tei_map[GTPH_PLANE_CTRL],
+			      "(801->1@21945), (1893->2@21945), "));
+	OSMO_ASSERT(nr_map_is(&hub->tei_map[GTPH_PLANE_USER],
+			      "(291->1@21945), (1383->2@21945), "));
 
 	gtphub_gc(hub, now + EXPIRE_ALL);
 }
@@ -846,7 +864,7 @@
 	resolve_to_sgsn("192.168.42.23", 2152);
 
 	const char *u_from_ggsn =
-		"32" 	/* 0b001'1 0010: version 1, protocol GTP, with seq nr. */ \
+		"32" 	/* 0b001'1 0010: version 1, protocol GTP, with seq nr */
 		"ff"	/* type 255: G-PDU */
 		"0058"	/* length: 88 + 8 octets == 96 */
 		"00000001" /* mapped User TEI for SGSN from create_pdp_ctx() */
@@ -858,7 +876,7 @@
 		"202122232425262728292a2b2c2d2e2f3031323334353637"
 		;
 	const char *u_to_sgsn =
-		"32" 	/* 0b001'1 0010: version 1, protocol GTP, with seq nr. */ \
+		"32" 	/* 0b001'1 0010: version 1, protocol GTP, with seq nr */
 		"ff"	/* type 255: G-PDU */
 		"0058"	/* length: 88 + 8 octets == 96 */
 		"00000123" /* unmapped User TEI */
@@ -877,7 +895,7 @@
 				    u_to_sgsn));
 
 	const char *u_from_sgsn =
-		"32" 	/* 0b001'1 0010: version 1, protocol GTP, with seq nr. */ \
+		"32" 	/* 0b001'1 0010: version 1, protocol GTP, with seq nr */
 		"ff"	/* type 255: G-PDU */
 		"0058"	/* length: 88 + 8 octets == 96 */
 		"00000002" /* mapped User TEI for GGSN from create_pdp_ctx() */
@@ -889,7 +907,7 @@
 		"202122232425262728292a2b2c2d2e2f3031323334353637"
 		;
 	const char *u_to_ggsn =
-		"32" 	/* 0b001'1 0010: version 1, protocol GTP, with seq nr. */ \
+		"32" 	/* 0b001'1 0010: version 1, protocol GTP, with seq nr */
 		"ff"	/* type 255: G-PDU */
 		"0058"	/* length: 88 + 8 octets == 96 */
 		"00000567" /* unmapped User TEI */
