diff --git a/arch-sim/sim-startup.c b/arch-sim/sim-startup.c
index 821b64787afcdb32b292064dc274eb8782723317..69772a6bcdeafe1861641eec3ff7fb230407d009 100644
--- a/arch-sim/sim-startup.c
+++ b/arch-sim/sim-startup.c
@@ -139,6 +139,7 @@ int main(int argc, char **argv)
 		ppi = INST(ppg, i);
 		sim_set_global_DS(ppi);
 		ppi->iface_name = ppi->cfg.iface_name;
+		ppi->port_name = ppi->cfg.port_name;
 		if (ppi->cfg.proto == PPSI_PROTO_RAW)
 			pp_printf("Warning: simulator doesn't support raw "
 					"ethernet. Using UDP\n");
diff --git a/arch-unix/unix-startup.c b/arch-unix/unix-startup.c
index 46d6629eb7325c7585bb90ea67bf35392ec8dfdb..ce7dfa57a2f29837b871c9259098d60076f16960 100644
--- a/arch-unix/unix-startup.c
+++ b/arch-unix/unix-startup.c
@@ -80,6 +80,7 @@ int main(int argc, char **argv)
 
 		ppi->glbs = ppg;
 		ppi->iface_name = ppi->cfg.iface_name;
+		ppi->port_name = ppi->cfg.port_name;
 		/* this old-fashioned "ethernet_mode" is a single bit */
 		ppi->ethernet_mode = (ppi->cfg.proto == PPSI_PROTO_RAW);
 		if (ppi->cfg.role == PPSI_ROLE_MASTER) {
diff --git a/arch-wrpc/wrc_ptp_ppsi.c b/arch-wrpc/wrc_ptp_ppsi.c
index c4822a4d2777dfd4fb31f2e9be1273d69f1f5b6f..eb315fb96ea6c19a1ea10708ca715f01a49a9116 100644
--- a/arch-wrpc/wrc_ptp_ppsi.c
+++ b/arch-wrpc/wrc_ptp_ppsi.c
@@ -74,7 +74,8 @@ struct pp_instance ppi_static = {
 	.portDS			= &portDS,
 	.n_ops			= &wrpc_net_ops,
 	.t_ops			= &wrpc_time_ops,
-	.iface_name 	= "wr1",
+	.iface_name		= "wr1",
+	.port_name		= "wr1",
 };
 
 /* We now have a structure with all globals, and multiple ppi inside */
diff --git a/arch-wrs/wrs-startup.c b/arch-wrs/wrs-startup.c
index 34e775e22e920f549e4ecead96e4376336c25485..7b23e1e17f125554658801534713082bf53b2808 100644
--- a/arch-wrs/wrs-startup.c
+++ b/arch-wrs/wrs-startup.c
@@ -154,6 +154,7 @@ int main(int argc, char **argv)
 
 		ppi->glbs = ppg;
 		ppi->iface_name = ppi->cfg.iface_name;
+		ppi->port_name = ppi->cfg.port_name;
 		/* this old-fashioned "ethernet_mode" is a single bit */
 		ppi->ethernet_mode = (ppi->cfg.proto == PPSI_PROTO_RAW);
 		if (ppi->cfg.role == PPSI_ROLE_MASTER) {
diff --git a/diag.c b/diag.c
index ed4eb6e0beeb75d55a789bbce2ffb96367a91c56..6c4f0366ca1d010bbe46495eb0b115cbb881717a 100644
--- a/diag.c
+++ b/diag.c
@@ -22,7 +22,7 @@ void __pp_diag(struct pp_instance *ppi, enum pp_diag_things th,
 		      int level, char *fmt, ...)
 {
 	va_list args;
-	char *name = ppi ? ppi->iface_name : "ppsi";
+	char *name = ppi ? ppi->port_name : "ppsi";
 
 	if (!__PP_DIAG_ALLOW(ppi, th, level))
 		return;
diff --git a/fsm.c b/fsm.c
index e6907eda1bea0924af73c96207254dedbb62dee2..6fa1d04ab3844363372c79b04fb988f9990a6c93 100644
--- a/fsm.c
+++ b/fsm.c
@@ -27,7 +27,7 @@ static void pp_fsm_printf(struct pp_instance *ppi, char *fmt, ...)
 	ppi->t_ops->get(ppi, &t);
 	pp_global_flags = oflags;
 
-	pp_printf("diag-fsm-1-%s: %09d.%03d: ", ppi->iface_name,
+	pp_printf("diag-fsm-1-%s: %09d.%03d: ", ppi->port_name,
 		  (int)t.seconds, (int)t.nanoseconds / 1000000);
 	va_start(args, fmt);
 	pp_vprintf(fmt, args);
@@ -113,7 +113,7 @@ int pp_state_machine(struct pp_instance *ppi, uint8_t *packet, int plen)
 		err = ip->f1(ppi, packet, plen);
 		if (err)
 			pp_printf("fsm for %s: Error %i in %s\n",
-				  ppi->iface_name, err, ip->name);
+				  ppi->port_name, err, ip->name);
 
 		/* done: if new state mark it, and enter it now (0 ms) */
 		if (ppi->state != ppi->next_state) {
@@ -127,6 +127,6 @@ int pp_state_machine(struct pp_instance *ppi, uint8_t *packet, int plen)
 		return ppi->next_delay;
 	}
 	/* Unknwon state, can't happen */
-	pp_printf("fsm: Unknown state for iface %s\n", ppi->iface_name);
+	pp_printf("fsm: Unknown state for port %s\n", ppi->port_name);
 	return 10000; /* No way out. Repeat message every 10s */
 }
diff --git a/include/ppsi/pp-instance.h b/include/ppsi/pp-instance.h
index 95dad4c5af90e40236c3530f5b7412e23489309e..9d0c7e2d9a53a1b1ba65038e4546bf9d11f1d958 100644
--- a/include/ppsi/pp-instance.h
+++ b/include/ppsi/pp-instance.h
@@ -177,7 +177,8 @@ struct pp_instance {
 		slave_only:1,
 		master_only:1,
 		ethernet_mode:1;
-	char *iface_name;
+	char *iface_name; /* for direct actions on hardware */
+	char *port_name; /* for diagnostics, mainly */
 	int port_idx;
 
 	struct pp_instance_cfg cfg;
diff --git a/lib-bare/bare-startup.c b/lib-bare/bare-startup.c
index e2b02648bf16aa4edfb5ae2abad8833408024395..387664e666040ca529e0b8ac2118cdd5ac874bfc 100644
--- a/lib-bare/bare-startup.c
+++ b/lib-bare/bare-startup.c
@@ -38,6 +38,7 @@ static struct pp_instance ppi_static = {
 	.n_ops			= &bare_net_ops,
 	.t_ops			= &bare_time_ops,
 	.iface_name 		= "eth0",
+	.port_name 		= "eth0",
 	.ethernet_mode		= PP_DEFAULT_ETHERNET_MODE,
 };
 
diff --git a/lib/cmdline.c b/lib/cmdline.c
index 3c96dc299669e662ac45957f6ccfd2ff3ec82dc0..57d7f3804bd597a398a875ec0f9d084d627995f2 100644
--- a/lib/cmdline.c
+++ b/lib/cmdline.c
@@ -159,9 +159,10 @@ int pp_parse_cmdline(struct pp_globals *ppg, int argc, char **argv)
 			break;
 		case 'b':
 			a = argv[++i];
-			if (ppg->nlinks == 1)
+			if (ppg->nlinks == 1) {
 				INST(ppg, 0)->iface_name = a;
-			else {
+				INST(ppg, 0)->port_name = a;
+			} else {
 				/* If ppsi.conf exists and more than one link is
 				 * configured, it makes no sense trying to set an iface
 				 * name */
diff --git a/time-sim/sim-socket.c b/time-sim/sim-socket.c
index 8e9f44dd69d3753e01c775a056fc065f7f362008..a9d032789858402ed546f84cd67e480b86bf202d 100644
--- a/time-sim/sim-socket.c
+++ b/time-sim/sim-socket.c
@@ -309,7 +309,7 @@ static int sim_net_init(struct pp_instance *ppi)
 	/* only UDP, RAW is not supported */
 	pp_diag(ppi, frames, 1, "sim_net_init UDP\n");
 	for (i = PP_NP_GEN; i <= PP_NP_EVT; i++) {
-		if (sim_open_ch(ppi, ppi->iface_name, i))
+		if (sim_open_ch(ppi, ppi->port_name, i))
 			return -1;
 	}
 	return 0;