Page History
- 2012-Nov-13 16:18 adesmet
- 2011-Jun-03 20:19 m
- 2011-Jun-03 20:17 m
- 2011-Jun-03 20:17 m
- 2011-Jun-03 20:12 m
- 2011-Jun-03 18:49 m
- 2011-Jun-03 18:47 m
- 2011-May-30 21:42 m
- 2011-May-25 23:36 m
- 2011-May-25 23:31 m
- 2011-May-20 14:39 m
- 2011-May-20 14:30 m
- 2011-Apr-21 16:20 m
- 2011-Apr-21 16:16 m
- 2011-Apr-20 17:14 m
- 2011-Apr-20 15:22 m
- 2011-Apr-19 19:36 m
- 2010-Dec-08 11:38 m
- 2010-Dec-08 11:37 m
- 2010-Nov-16 01:06 m
- 2010-Nov-09 17:08 m
- 2010-Nov-09 16:56 m
- 2010-Nov-09 16:53 m
- 2010-Nov-09 16:45 m
- 2010-Nov-09 16:38 m
- 2010-Nov-09 16:34 m
- 2010-Nov-09 15:20 m
- 2010-Nov-08 17:37 m
- 2010-Nov-08 17:34 m
- 2010-Nov-08 17:11 m
- 2010-Nov-08 17:09 m
- 2010-Nov-08 17:08 m
- 2010-Nov-08 15:49 m
- 2010-Nov-08 15:39 m
- 2010-Oct-27 18:13 m
- 2010-Oct-27 18:12 m
- 2010-Oct-27 18:11 m
- 2010-Oct-27 18:09 m
- 2010-Oct-27 18:06 m
- 2010-Oct-27 18:05 m
- 2010-Oct-27 18:03 m
- 2010-Oct-27 17:08 m
- 2010-Oct-27 17:07 m
- 2010-Oct-27 17:01 m
- 2010-Oct-22 16:19 m
- 2010-Oct-22 16:16 m
- 2010-Oct-22 16:15 m
- 2010-Oct-21 15:59 m
- 2010-Oct-18 19:19 m
- 2010-Oct-11 23:54 m
- 2010-Oct-07 14:12 m
- 2010-Oct-07 13:31 m
- 2010-Sep-08 11:25 adesmet
- 2010-Mar-12 02:41 m
- 2010-Mar-12 02:37 m
- 2010-Mar-12 02:36 m
- 2010-Mar-09 16:52 m
- 2010-Mar-09 16:32 m
- 2010-Mar-03 15:11 m
- 2010-Mar-03 15:10 m
- 2010-Mar-03 14:22 m
- 2010-Mar-02 17:55 m
- 2010-Mar-02 16:27 m
- 2010-Mar-01 17:02 m
- 2010-Mar-01 16:52 m
- 2010-Mar-01 16:25 m
- 2010-Mar-01 15:18 m
- 2010-Feb-24 16:58 m
- 2010-Feb-24 16:54 m
- 2010-Feb-24 14:07 m
- 2010-Feb-24 14:06 m
- 2010-Feb-24 02:02 m
- 2010-Feb-24 01:59 m
- 2010-Feb-05 03:40 m
- 2010-Feb-05 03:23 m
- 2010-Feb-05 03:22 m
First milestone
It had been since few months so it may not appropriate to call it as first mile stone. I would say it is first milestone for working code of Condor.
Well, I must admit that it is too painful to convert everything at once. Try to devise some strategy that can split works and test-cases. Which modules are necessary and which are not for the first milestone?
Features
- DC Skeleton communicating each other
Will not be implemented
- NO_DNS option
- (...will add on...)
Test required
Don't forget below lists.
- Choosing a specific interface for Condor use in multi-homed IPv6 host. Use param "NETWORK_INTERFACE".
currently working on
Link error
Mar, 9 : resolved some errors. condor_getaddrinfo, condor_getnameinfo Mar, 12 : most of errors are resolved. get_full_hostname should be converted.
/u/m/_/m/ron_ws/src/condor_util_lib/internet.c:1024: undefined reference to `my_ip_addr' ../condor_c++_util/cplus_lib.a(my_hostname.o): In function `init_full_hostname': /u/m/_/m/ron_ws/src/condor_c++_util/my_hostname.cpp:140: undefined reference to `get_full_hostname_ipv6(char const*, ipaddr&)' ../condor_c++_util/cplus_lib.a(my_hostname.o): In function `init_ipaddr': /u/m/_/m/ron_ws/src/condor_c++_util/my_hostname.cpp:209: undefined reference to `get_full_hostname_ipv6(char const*, ipaddr&)' ../condor_io/libcedar.a(sock.o): In function `Sock::get_port()': /u/m/_/m/ron_ws/src/condor_io/sock.cpp:1952: undefined reference to `condor_getsockname(int, ipaddr&)' ../condor_io/libcedar.a(sock.o): In function `Sock::bindWithin(int, int, bool)': /u/m/_/m/ron_ws/src/condor_io/sock.cpp:447: undefined reference to `ipv6_my_ip_addr()' ../condor_io/libcedar.a(sock.o): In function `Sock::bind(bool, int, bool)': /u/m/_/m/ron_ws/src/condor_io/sock.cpp:579: undefined reference to `ipv6_my_ip_addr()' ../condor_io/libcedar.a(sock.o): In function `Sock::do_connect(char const*, int, bool)': /u/m/_/m/ron_ws/src/condor_io/sock.cpp:752: undefined reference to `ipaddr::ipaddr(sockaddr*)' ../condor_io/libcedar.a(condor_auth_x509.o): In function `getDaemonList(ReliSock*)': /u/m/_/m/ron_ws/src/condor_io/condor_auth_x509.cpp:480: undefined reference to `ipaddr::to_hostname(char*, int) const' collect2: ld returned 1 exit status
Note for constants
Don't forget constants that should be adjusted!
MAXMACHNAME : seen in file_transfer_db.c, stores the result of sin_to_hostname.
Converting utility functions
is_ipaddr
int is_ipaddr(const char *inbuf, struct in_addr *sin_addr)
is_ipaddr() does convert string representation of IP address into numerical representation(in_addr). And, it returns FALSE if it fails.
Original implementation was just re-invention of inet_ntop()/inet_ntoa(). So, I replaced to new implementation that calls inet_ntop() twice. (with AF_INET and AF_INET6)
get_full_hostname
It uses gethostbyname() which has been obsoleted. It should call getaddrinfo() instead. The function has about 150-200 lines of code. At the end of function, it tail-calls get_full_hostname_from_hostent(). struct hostent is also deprecated structure.
It requires overhaul from interface to implementation.
Importance: ?
IpVerify
[zach] implemented by mostly Todd, and little bit by Zach and Dan.
IpVerify verifies the remote process's ip from the configuration file. There are many lines that are referring to DCpermission. I am bit confused here. I do not understand what 'DCpermission' made for.
It requires overhaul from interface to implementation.
Importance: ?
Ulrich Mystery
Ulrich's Userlevel IPv6 Programming Introductionn - http://people.redhat.com/drepper/userapi-ipv6.html
He denotes gethostbyaddr() as an obsolete. However, gethostbyaddr() accepts a socket type as a parameter. (AF_INET, AF_INET6) That means it should work well with IPv6. Why it is obsolete??
I decided to use continually gethostbyaddr(). Remvoing gethostbyaddr() requires a lot of modification on existing code.
Converting Sock
Sock is not only used by TCP/UDP connection but also used by Unix domain socket (AF_UNIX). Basically, Sock can only create TCP or UDP socket internally but SharedEndPoint and SharedPortClient creates Unix domain socket and calls Sock::assign() to pass the descriptor.
I guess this is broken abstraction since Sock has IP related functions such as peer_addr() or peer_port() which are not available to Unix domain socket.
It seems assign() is only used by these Shared* thing. So maybe we could end up with refactoring it.
List of Condor IP addr functions
// from condor_c++_util/get_full_hostname.cpp extern char* get_full_hostname( const char*, struct in_addr *sin_addrp = NULL ); extern char* get_full_hostname_from_hostent( struct hostent* host_ptr, const char* host ); // from condor_util_lib/condor_netdb.c struct hostent * condor_gethostbyname(const char *name); struct hostent * condor_gethostbyaddr(const char *addr, SOCKET_LENGTH_TYPE len, int type); int condor_gethostname(char *name, size_t namelen); // from condor_util_lib/internet.c // internet.c is a total failure...... tons of old-style codings int is_ipaddr(const char *inbuf, struct in_addr *sin_addr); int is_ipaddr_no_wildcard(const char *inbuf, struct in_addr *sin_addr); int is_ipaddr_wildcard(const char *inbuf, struct in_addr *sin_addr, struct in_addr *mask_addr); int is_valid_network( const char *network, struct in_addr *ip, struct in_addr *mask); int is_valid_sinful( const char *sinful ); // there are many more from internet.c. omitted at this time.
Condor NetDB
Condor defines its own netdb-related functions (proxy functions) for its own DNS system called NO_DNS.
What is it?
TCP_FORWARDING_HOST ?
solved
KeyCache
KeyCache, uses sockaddr_in for storing ip addr. before modify, be sure to look at the overall picture. only used in condor_secman and daemon core.
KeyCacheEntry stores sockaddr_in. KeyCache converts sockaddr_in into sinful string and use the string as a key.
Sock::my_addr() can fail?
One of asymmetry in Sock class is that peer_addr() does not fail and always return a value but my_addr() can fail. ( peer_addr tells you the address of peer, my_addr() tells you the address of local socket)
The possible case for a failure of my_addr() is that when Sock class did not assign a socket descriptor.
In this case, peer_addr() can also fail.
Returning a pointer of a static buffer inside a function
It is quite common practice in Condor source code that returning a pointer of a static buffer in a function. It was perfectly fine in a world that pthread is rare and multi-core is unknown. It is obviously non-re-entrant and non-thread-safe. Well, I could do as it was. But, I am slightly uncomfortable of writing such a function. So, I decided to use MyString instead of returning a pointer of a static buffer.
changes
should i change?
Sock::get_port() -> Sock::my_addr().get_port() *for consistency