+int ipv4_to_mac(const alfred_addr *addr, struct ether_addr *mac) +{
[...]
This will not return the mac address of the device. It will therefore break the synchronization code. see SOURCE_FIRST_HAND in sync_data and the code which sets data_source in finish_alfred_push_data.
You are correct - this does not return the MAC address of the device. Rather it uses the source IP address. Since we're dealing with IPv4 in this case I believe it is safe to assume that the network has been properly configured and the remote node will have a valid IPv4 address, which is used here. In my testing the synchronization and data sharing worked properly and all data was shared as expected.
It should not be synced between masters when the data was received from a slave (because the master will not detect it as FIRST_HAND). If it does still work then you have a bug somewhere else.
[...]
What would you like to see here? Would you prefer an ARP request to go and get the MAC address of the remote node?
Doesn't sound that nice. @Simon, do you have an opinion about this patch before Jonathan rewrites it? (It may take a while until he answers because he should be offline this week)
I got thinking about the testing I did and realized that I tested in a setup where every node was set to master - there were no slaves. My testing consisted of the following:
Node A: $ cat hostname | alfred -s 100
Node B: $ alfred -r 100
I was able to see the entry from the remote node (with the correct MAC address) in the query result.
Is there a typical test routine that is used to ensure proper operation of alfred? Should I simply add a third node to my setup and configure it as a slave and make sure things operate properly or is there a more automated test or better approach?