En esta práctica se va a crear el programa muxin, cuyo interfaz con el usuario ya ha sido descrito.
muxin debe leer de 3 descriptores. Al recibir un paquete por uno cualquiera de ellos decrementa el campo maxsaltos del mismo. Si el nuevo valor de maxsaltos es mayor que cero transfiere el paquete al bloque de su entidad. Esta transferencia se realiza a través de una cola de mensajes, la cual transportará el tráfico multiplexado de los tres descriptores entrantes. Si el valor resultante de maxsaltos es menor o igual que cero descarta silenciosamente el paquete.
La cola de mensajes para la comunicación entre los bloques y
de una entidad viene determinada por la clave entregada como primer parámetro del programa muxin y como último parámetro de nucleo. Esta cola es creada por el programa nucleo.
La lectura simultánea por los 3 enlaces entrantes se hará bloqueante mediante la llamada al sistema select.
Así pues el programa muxin debe:
El formato que se sugiere para el mensaje con el paquete de datos es el siguiente:
typedef struct msg_data { int tipo; // Tipo de mensaje MSG_DATA union { char buf[sizeof(paquete)]; // El paquete en si paquete paq; } data; } msg_data;
Donde la estructura del paquete es la misma que se transfiere por las pipes y como se ve en la figura 8 es:
typedef struct paquete { unsigned int id_serv_origen; unsigned int id_serv_destino; unsigned int maxsaltos; unsigned int numbytesdatos; unsigned int id_proc_origen; unsigned int id_proc_destino; char buf[TAM_MDU]; } paquete;