Commit 2c03c97b authored by Aurelio Colosimo's avatar Aurelio Colosimo

pp_send_packet fixed for peer delay address usage

parent a1d17564
......@@ -10,7 +10,7 @@ extern int bare_open_ch(struct pp_instance *ppi, char *name);
extern int bare_recv_packet(struct pp_instance *ppi, void *pkt, int len,
TimeInternal *t);
extern int bare_send_packet(struct pp_instance *ppi, void *pkt, int len,
int chtype);
int chtype, int use_pdelay_addr);
extern void bare_main_loop(struct pp_instance *ppi);
......
......@@ -14,14 +14,16 @@ int bare_recv_packet(struct pp_instance *ppi, void *pkt, int len,
return sys_recv(NP(ppi)->ch[PP_NP_GEN].fd, pkt, len, 0);
}
int bare_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype)
int bare_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype,
int use_pdelay_addr)
{
return sys_send(NP(ppi)->ch[chtype].fd, pkt, len, 0);
}
int pp_recv_packet(struct pp_instance *ppi, void *pkt, int len, TimeInternal *t)
__attribute__((alias("bare_recv_packet")));
int pp_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype)
int pp_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype,
int use_pdelay_addr)
__attribute__((alias("bare_send_packet")));
#define PF_PACKET 17
......
......@@ -52,14 +52,27 @@ int posix_recv_packet(struct pp_instance *ppi, void *pkt, int len,
return -1;
}
int posix_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype)
int posix_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype,
int use_pdelay_addr)
{
return send(NP(ppi)->ch[chtype].fd, pkt, len, 0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(PP_GENERAL_PORT);
if (!use_pdelay_addr)
addr.sin_addr.s_addr = NP(ppi)->mcast_addr;
else
addr.sin_addr.s_addr = NP(ppi)->peer_mcast_addr;
return sendto(NP(ppi)->ch[chtype].fd, pkt, len, 0,
(struct sockaddr *)&addr, sizeof(struct sockaddr_in));
}
int pp_recv_packet(struct pp_instance *ppi, void *pkt, int len, TimeInternal *t)
__attribute__((alias("posix_recv_packet")));
int pp_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype)
int pp_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype,
int use_pdelay_addr)
__attribute__((alias("posix_send_packet")));
/* To open a channel we must bind to an interface and so on */
......
......@@ -18,6 +18,6 @@ extern int posix_open_ch(struct pp_instance *ppi, char *name);
extern int posix_recv_packet(struct pp_instance *ppi, void *pkt, int len,
TimeInternal *t);
extern int posix_send_packet(struct pp_instance *ppi, void *pkt, int len,
int chtype);
int chtype, int use_pdelay_addr);
extern void posix_main_loop(struct pp_instance *ppi);
......@@ -33,7 +33,8 @@ int spec_recv_packet(struct pp_instance *ppi, void *pkt, int len,
return minic_rx_frame(pkt, pkt + 14, len - 14, NULL);
}
int spec_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype)
int spec_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype,
int use_pdelay_addr)
{
static int led;
......@@ -44,5 +45,6 @@ int spec_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype)
int pp_recv_packet(struct pp_instance *ppi, void *pkt, int len, TimeInternal *t)
__attribute__((alias("spec_recv_packet")));
int pp_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype)
int pp_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype,
int use_pdelay_addr)
__attribute__((alias("spec_send_packet")));
......@@ -9,7 +9,8 @@ extern int spec_open_ch(struct pp_instance *ppi);
extern int spec_recv_packet(struct pp_instance *ppi, void *pkt, int len,
TimeInternal *t);
extern int spec_send_packet(struct pp_instance *ppi, void *pkt, int len);
extern int spec_send_packet(struct pp_instance *ppi, void *pkt, int len,
int use_pdelay_addr);
extern void spec_main_loop(struct pp_instance *ppi);
extern void _irq_entry(void); /* unused, to make crt0.S happy */
......
......@@ -153,7 +153,7 @@ struct pp_servo {
struct pp_net_path {
struct pp_channel ch[2]; /* event and general channel (see above
* #define's */
Integer32 ucast_addr;
/* FIXME now unused, check it Integer32 ucast_addr;*/
Integer32 mcast_addr;
Integer32 peer_mcast_addr;
};
......@@ -253,7 +253,8 @@ extern int pp_net_shutdown(struct pp_instance *ppi);
extern int pp_recv_packet(struct pp_instance *ppi, void *pkt, int len,
TimeInternal *t);
extern int pp_send_packet(struct pp_instance *ppi, void *pkt, int len,
int chtype); /* chtype: PP_NP_GEN || PP_NP_EVT */
int chtype, int use_pdelay_addr);
/* chtype: PP_NP_GEN || PP_NP_EVT */
/* Timers */
extern int pp_timer_init(struct pp_instance *ppi); /* initializes timer common
......
......@@ -569,9 +569,9 @@ void msg_unpack_pdelay_resp_followup(void *buf,
PP_VPRINTF("\n");
}
#define MSG_SEND_AND_RET(x,y)\
if (pp_send_packet(ppi, ppi->buf_out, PP_## x ##_LENGTH, PP_NP_## y) <\
PP_## x ##_LENGTH) {\
#define MSG_SEND_AND_RET(x,y,z)\
if (pp_send_packet(ppi, ppi->buf_out, PP_## x ##_LENGTH, PP_NP_## y, z)\
< PP_## x ##_LENGTH) {\
PP_PRINTF("## x ## Message can't be sent -> FAULTY state!");\
return -1;\
}\
......@@ -584,7 +584,7 @@ int msg_issue_announce(struct pp_instance *ppi)
{
msg_pack_announce(ppi);
MSG_SEND_AND_RET(ANNOUNCE, GEN);
MSG_SEND_AND_RET(ANNOUNCE, GEN, 0);
}
/* Pack and send on event multicast ip adress a Sync message */
......@@ -597,7 +597,7 @@ int msg_issue_sync(struct pp_instance *ppi)
msg_pack_sync(ppi,&orig_tstamp);
MSG_SEND_AND_RET(SYNC, EVT);
MSG_SEND_AND_RET(SYNC, EVT, 0);
}
/* Pack and send on general multicast ip adress a FollowUp message */
......@@ -608,7 +608,7 @@ int msg_issue_followup(struct pp_instance *ppi, TimeInternal *time)
msg_pack_follow_up(ppi, &prec_orig_tstamp);
MSG_SEND_AND_RET(FOLLOW_UP, GEN);
MSG_SEND_AND_RET(FOLLOW_UP, GEN, 0);
}
/* Pack and send on event multicast ip adress a DelayReq message */
......@@ -621,7 +621,7 @@ int msg_issue_delay_req(struct pp_instance *ppi)
msg_pack_delay_req(ppi, &orig_tstamp);
MSG_SEND_AND_RET(DELAY_REQ, EVT);
MSG_SEND_AND_RET(DELAY_REQ, EVT, 0);
}
/* Pack and send on event multicast ip adress a PDelayReq message */
......@@ -634,7 +634,7 @@ int msg_issue_pdelay_req(struct pp_instance *ppi)
msg_pack_pdelay_req(ppi, &orig_tstamp);
MSG_SEND_AND_RET(PDELAY_REQ, EVT);
MSG_SEND_AND_RET(PDELAY_REQ, EVT, 1);
}
/* Pack and send on event multicast ip adress a PDelayResp message */
......@@ -645,7 +645,7 @@ int msg_issue_pdelay_resp(struct pp_instance *ppi, TimeInternal *time,
from_TimeInternal(time, &req_rec_tstamp);
msg_pack_pdelay_resp(ppi, hdr, &req_rec_tstamp);
MSG_SEND_AND_RET(PDELAY_RESP, EVT);
MSG_SEND_AND_RET(PDELAY_RESP, EVT, 1);
}
/* Pack and send on event multicast ip adress a DelayResp message */
......@@ -656,7 +656,7 @@ int msg_issue_delay_resp(struct pp_instance *ppi, TimeInternal *time)
msg_pack_delay_resp(ppi, &ppi->delay_req_hdr, &rcv_tstamp);
MSG_SEND_AND_RET(PDELAY_RESP, GEN);
MSG_SEND_AND_RET(PDELAY_RESP, GEN, 0);
}
/* Pack and send on event multicast ip adress a DelayResp message */
......@@ -668,5 +668,5 @@ int msg_issue_pdelay_resp_follow_up(struct pp_instance *ppi, TimeInternal *time)
msg_pack_pdelay_resp_followup(ppi, &ppi->pdelay_req_hdr,
&resp_orig_tstamp);
MSG_SEND_AND_RET(PDELAY_RESP_FOLLOW_UP, GEN);
MSG_SEND_AND_RET(PDELAY_RESP_FOLLOW_UP, GEN, 0);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment