mirror of
https://github.com/QuantumPackage/qp2.git
synced 2024-11-18 11:23:38 +01:00
8b22e38c9c
* fixed laplacian of aos * corrected the laplacians of aos * added dft_one_e * added new feature for new dft functionals * changed the configure to add new functionals * changed the configure * added dft_one_e/README.rst * added README.rst in new_functionals * added source/programmers_guide/new_ks.rst * Thesis Yann * Added gmp installation in configure * improved qp_e_conv_fci * Doc * Typos * Added variance_max * Fixed completion in qp_create * modif TODO * fixed DFT potential for n_states gt 1 * improved pot pbe * trying to improve sr PBE * fixed potential pbe * fixed the vxc smashed for pbe sr and normal * Comments in selection * bug fixed by peter * Fixed bug with zero beta electrons * Update README.rst * Update e_xc_new_func.irp.f * Update links.rst * Update quickstart.rst * Update quickstart.rst * updated cipsi * Fixed energies of non-expected s2 (#9) * Moved diag_algorithm in Davdison * Add print_ci_vector in tools (#11) * Fixed energies of non-expected s2 * Moved diag_algorithm in Davdison * Fixed travis * Added print_ci_vector * Documentation * Cleaned qp_set_mo_class.ml * Removed Core in taskserver * Merge develop-toto and manus (#12) * Fixed energies of non-expected s2 * Moved diag_algorithm in Davdison * Fixed travis * Added print_ci_vector * Documentation * Cleaned qp_set_mo_class.ml * Removed Core in taskserver * Frozen core for heavy atoms * Improved molden module * In sync with manus * Fixed some of the documentation errors * Develop toto (#13) * Fixed energies of non-expected s2 * Moved diag_algorithm in Davdison * Fixed travis * Added print_ci_vector * Documentation * Cleaned qp_set_mo_class.ml * Removed Core in taskserver * Frozen core for heavy atoms * Improved molden module * In sync with manus * Fixed some of the documentation errors * Develop manus (#14) * modified printing for rpt2 * Comment * Fixed plugins * Scripting for functionals * Documentation * Develop (#10) * fixed laplacian of aos * corrected the laplacians of aos * added dft_one_e * added new feature for new dft functionals * changed the configure to add new functionals * changed the configure * added dft_one_e/README.rst * added README.rst in new_functionals * added source/programmers_guide/new_ks.rst * Thesis Yann * Added gmp installation in configure * improved qp_e_conv_fci * Doc * Typos * Added variance_max * Fixed completion in qp_create * modif TODO * fixed DFT potential for n_states gt 1 * improved pot pbe * trying to improve sr PBE * fixed potential pbe * fixed the vxc smashed for pbe sr and normal * Comments in selection * bug fixed by peter * Fixed bug with zero beta electrons * Update README.rst * Update e_xc_new_func.irp.f * Update links.rst * Update quickstart.rst * Update quickstart.rst * updated cipsi * Fixed energies of non-expected s2 (#9) * Moved diag_algorithm in Davdison * some modifs * modified gfortran_debug.cfg * fixed automatization of functionals * modified e_xc_general.irp.f * minor modifs in ref_bitmask.irp.f * modifying functionals * rs_ks_scf and ks_scf compiles with the automatic handling of functionals * removed prints * fixed configure * fixed the new functionals * Merge toto * modified automatic functionals * Changed python into python2 * from_xyz suppressed * Cleaning repo * Update README.md * Update README.md * Contributors * Update GITHUB.md * bibtex
70 lines
1.6 KiB
C
70 lines
1.6 KiB
C
#include <caml/mlvalues.h>
|
|
#include <caml/memory.h>
|
|
#include <caml/alloc.h>
|
|
#include <caml/custom.h>
|
|
#include <caml/threads.h>
|
|
|
|
#include <string.h>
|
|
|
|
|
|
|
|
/* Adapted from
|
|
https://github.com/monadbobo/ocaml-core/blob/master/base/core/lib/linux_ext_stubs.c
|
|
*/
|
|
|
|
#include <unistd.h>
|
|
#include <sys/ioctl.h>
|
|
#include <net/if.h>
|
|
#include <sys/socket.h>
|
|
#include <netinet/in.h>
|
|
#include <arpa/inet.h>
|
|
|
|
CAMLprim value get_ipv4_address_for_interface(value v_interface)
|
|
{
|
|
CAMLparam1(v_interface);
|
|
struct ifreq ifr;
|
|
int fd = -1;
|
|
value res;
|
|
char* error = NULL;
|
|
|
|
memset(&ifr, 0, sizeof(ifr));
|
|
ifr.ifr_addr.sa_family = AF_INET;
|
|
/* [ifr] is already initialized to zero, so it doesn't matter if the
|
|
incoming string is too long, and [strncpy] fails to add a \0. */
|
|
strncpy(ifr.ifr_name, String_val(v_interface), IFNAMSIZ - 1);
|
|
|
|
caml_enter_blocking_section();
|
|
fd = socket(AF_INET, SOCK_DGRAM, 0);
|
|
|
|
if (fd == -1)
|
|
error = "error: couldn't allocate socket";
|
|
else {
|
|
if (ioctl(fd, SIOCGIFADDR, &ifr) < 0)
|
|
error = "error: ioctl(fd, SIOCGIFADDR, ...) failed";
|
|
|
|
(void) close(fd);
|
|
}
|
|
|
|
caml_leave_blocking_section();
|
|
|
|
if (error == NULL) {
|
|
/* This is weird but doing the usual casting causes errors when using
|
|
* the new gcc on CentOS 6. This solution was picked up on Red Hat's
|
|
* bugzilla or something. It also works to memcpy a sockaddr into
|
|
* a sockaddr_in. This is faster hopefully.
|
|
*/
|
|
union {
|
|
struct sockaddr sa;
|
|
struct sockaddr_in sain;
|
|
} u;
|
|
u.sa = ifr.ifr_addr;
|
|
res = caml_copy_string(inet_ntoa(u.sain.sin_addr));
|
|
}
|
|
else
|
|
res = caml_copy_string(error);
|
|
CAMLreturn(res);
|
|
|
|
}
|
|
|
|
|