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); ...@@ -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, extern int bare_recv_packet(struct pp_instance *ppi, void *pkt, int len,
TimeInternal *t); TimeInternal *t);
extern int bare_send_packet(struct pp_instance *ppi, void *pkt, int len, 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); 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, ...@@ -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); 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); 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) int pp_recv_packet(struct pp_instance *ppi, void *pkt, int len, TimeInternal *t)
__attribute__((alias("bare_recv_packet"))); __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"))); __attribute__((alias("bare_send_packet")));
#define PF_PACKET 17 #define PF_PACKET 17
......
...@@ -52,14 +52,27 @@ int posix_recv_packet(struct pp_instance *ppi, void *pkt, int len, ...@@ -52,14 +52,27 @@ int posix_recv_packet(struct pp_instance *ppi, void *pkt, int len,
return -1; 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) int pp_recv_packet(struct pp_instance *ppi, void *pkt, int len, TimeInternal *t)
__attribute__((alias("posix_recv_packet"))); __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"))); __attribute__((alias("posix_send_packet")));
/* To open a channel we must bind to an interface and so on */ /* 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); ...@@ -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, extern int posix_recv_packet(struct pp_instance *ppi, void *pkt, int len,
TimeInternal *t); TimeInternal *t);
extern int posix_send_packet(struct pp_instance *ppi, void *pkt, int len, 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); 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, ...@@ -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); 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; static int led;
...@@ -44,5 +45,6 @@ int spec_send_packet(struct pp_instance *ppi, void *pkt, int len, int chtype) ...@@ -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) int pp_recv_packet(struct pp_instance *ppi, void *pkt, int len, TimeInternal *t)
__attribute__((alias("spec_recv_packet"))); __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"))); __attribute__((alias("spec_send_packet")));
...@@ -9,7 +9,8 @@ extern int spec_open_ch(struct pp_instance *ppi); ...@@ -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, extern int spec_recv_packet(struct pp_instance *ppi, void *pkt, int len,
TimeInternal *t); 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 spec_main_loop(struct pp_instance *ppi);
extern void _irq_entry(void); /* unused, to make crt0.S happy */ extern void _irq_entry(void); /* unused, to make crt0.S happy */
......
...@@ -153,7 +153,7 @@ struct pp_servo { ...@@ -153,7 +153,7 @@ struct pp_servo {
struct pp_net_path { struct pp_net_path {
struct pp_channel ch[2]; /* event and general channel (see above struct pp_channel ch[2]; /* event and general channel (see above
* #define's */ * #define's */
Integer32 ucast_addr; /* FIXME now unused, check it Integer32 ucast_addr;*/
Integer32 mcast_addr; Integer32 mcast_addr;
Integer32 peer_mcast_addr; Integer32 peer_mcast_addr;
}; };
...@@ -253,7 +253,8 @@ extern int pp_net_shutdown(struct pp_instance *ppi); ...@@ -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, extern int pp_recv_packet(struct pp_instance *ppi, void *pkt, int len,
TimeInternal *t); TimeInternal *t);
extern int pp_send_packet(struct pp_instance *ppi, void *pkt, int len, 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 */ /* Timers */
extern int pp_timer_init(struct pp_instance *ppi); /* initializes timer common extern int pp_timer_init(struct pp_instance *ppi); /* initializes timer common
......
...@@ -569,9 +569,9 @@ void msg_unpack_pdelay_resp_followup(void *buf, ...@@ -569,9 +569,9 @@ void msg_unpack_pdelay_resp_followup(void *buf,
PP_VPRINTF("\n"); PP_VPRINTF("\n");
} }
#define MSG_SEND_AND_RET(x,y)\ #define MSG_SEND_AND_RET(x,y,z)\
if (pp_send_packet(ppi, ppi->buf_out, PP_## x ##_LENGTH, PP_NP_## y) <\ if (pp_send_packet(ppi, ppi->buf_out, PP_## x ##_LENGTH, PP_NP_## y, z)\
PP_## x ##_LENGTH) {\ < PP_## x ##_LENGTH) {\
PP_PRINTF("## x ## Message can't be sent -> FAULTY state!");\ PP_PRINTF("## x ## Message can't be sent -> FAULTY state!");\
return -1;\ return -1;\
}\ }\
...@@ -584,7 +584,7 @@ int msg_issue_announce(struct pp_instance *ppi) ...@@ -584,7 +584,7 @@ int msg_issue_announce(struct pp_instance *ppi)
{ {
msg_pack_announce(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 */ /* Pack and send on event multicast ip adress a Sync message */
...@@ -597,7 +597,7 @@ int msg_issue_sync(struct pp_instance *ppi) ...@@ -597,7 +597,7 @@ int msg_issue_sync(struct pp_instance *ppi)
msg_pack_sync(ppi,&orig_tstamp); 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 */ /* 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) ...@@ -608,7 +608,7 @@ int msg_issue_followup(struct pp_instance *ppi, TimeInternal *time)
msg_pack_follow_up(ppi, &prec_orig_tstamp); 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 */ /* Pack and send on event multicast ip adress a DelayReq message */
...@@ -621,7 +621,7 @@ int msg_issue_delay_req(struct pp_instance *ppi) ...@@ -621,7 +621,7 @@ int msg_issue_delay_req(struct pp_instance *ppi)
msg_pack_delay_req(ppi, &orig_tstamp); 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 */ /* Pack and send on event multicast ip adress a PDelayReq message */
...@@ -634,7 +634,7 @@ int msg_issue_pdelay_req(struct pp_instance *ppi) ...@@ -634,7 +634,7 @@ int msg_issue_pdelay_req(struct pp_instance *ppi)
msg_pack_pdelay_req(ppi, &orig_tstamp); 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 */ /* 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, ...@@ -645,7 +645,7 @@ int msg_issue_pdelay_resp(struct pp_instance *ppi, TimeInternal *time,
from_TimeInternal(time, &req_rec_tstamp); from_TimeInternal(time, &req_rec_tstamp);
msg_pack_pdelay_resp(ppi, hdr, &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 */ /* 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) ...@@ -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_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 */ /* 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) ...@@ -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, msg_pack_pdelay_resp_followup(ppi, &ppi->pdelay_req_hdr,
&resp_orig_tstamp); &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