20191230_jeffrey - silenceuncrio/diary GitHub Wiki

0855

review

0940

M300 被 planet 反應說 setting wizard 在每一次的 login 後都會跳出來很煩

希望有個選項可以把 setting wizard 關掉

M300[release/v2.02]

  • Products/Vendor = M300/0_GENERIC

1020

我應該開一個 wiki 來整理一下目前 setting wizard 的狀況

1120

先把自己想要的 implement 方式整理在 wiki 上

1335

m330[release/v0.08] 有 web ui 的需求

  • Vendor/Products = PI/0_PI_WIFI

m330[release/v0.08] - trigger wifi_apsta.cgi?act=status&index=0 at the beginning while 'WiFi > Client' List page opened

commit 0a7e5eea0604f26cbdb3bbba9a5274c5e5fde88e
Refs: [release/v0.08], {origin/release/v0.08}
Author: jeffrey <[email protected]>
Date:   Mon Dec 30 14:12:39 2019 +0800

    trigger wifi_apsta.cgi?act=status&index=0 at the beginning while 'WiFi > Client' List page opened
    - trigger the status while user click each nav - just like the 'Refresh' button

 proscend/prosrc/www/app/feature/wifi_info.html |  4 ++--
 proscend/prosrc/www/app/feature/wifi_info.js   | 20 ++++++++++++++++++++
 2 files changed, 22 insertions(+), 2 deletions(-)

1440

M300[release/v2.02] - at WAN > Priority, if apply with 'WAN Priority' changed, remind the user to reboot to take effect

commit cbb1221927d63b7a86e548ce08a215188b10e478
Refs: [release/v2.02], {origin/release/v2.02}
Author: jeffrey <[email protected]>
Date:   Mon Dec 30 14:38:42 2019 +0800

    at WAN > Priority, if apply with 'WAN Priority' changed, remind the user to reboot to take effect

 proscend/prosrc/www/app/feature/wanPriority.js | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

1455

利用最新的 m330[release/v0.08]

  • Vendor/Products = PI/0_PI_WIFI

準備好以下環境

+-------+                                           +-------+
|       |                   lan                     |       |
| m330  +-------------------------------------------+ m330  |
|       | 192.168.1.11                 192.168.1.13 |       |
+-------+                                           +-------+

參考 The Linux Programming Interface - Chapter 59: Sockets: Internet Domains


gre_keepalive_20.h

#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <ctype.h>

#define BUF_SIZE 10                     /* Maximum size of messages exchanged
                                           between client and server */
#define PORT_NUM 50002                  /* Server port number */

gre_keepalive_20_sv.c

#include "gre_keepalive_20.h"

int
main(int argc, char *argv[])
{
    struct sockaddr_in6 svaddr, claddr;
    int sfd, j;
    ssize_t numBytes;
    socklen_t len;
    char buf[BUF_SIZE];
    char claddrStr[INET6_ADDRSTRLEN];

    sfd = socket(AF_INET6, SOCK_DGRAM, 0);
    if (sfd == -1)
    {
        printf("socket");
        exit(1);
    }

    memset(&svaddr, 0, sizeof(struct sockaddr_in6));
    svaddr.sin6_family = AF_INET6;
    svaddr.sin6_addr = in6addr_any;                     /* Wildcard address */
    svaddr.sin6_port = htons(PORT_NUM);

    if (bind(sfd, (struct sockaddr *) &svaddr,
                sizeof(struct sockaddr_in6)) == -1)
    {
        printf("bind");
        exit(1);
    }

    /* Receive messages, convert to uppercase, and return to client */

    for (;;) {
        len = sizeof(struct sockaddr_in6);
        numBytes = recvfrom(sfd, buf, BUF_SIZE, 0,
                            (struct sockaddr *) &claddr, &len);
        if (numBytes == -1)
        {
            printf("recvfrom");
            exit(1);
        }

        if (inet_ntop(AF_INET6, &claddr.sin6_addr, claddrStr,
                    INET6_ADDRSTRLEN) == NULL)
            printf("Couldn't convert client address to string\n");
        else
            printf("Server received %ld bytes from (%s, %u)\n",
                    (long) numBytes, claddrStr, ntohs(claddr.sin6_port));

        for (j = 0; j < numBytes; j++)
            buf[j] = toupper((unsigned char) buf[j]);

        if (sendto(sfd, buf, numBytes, 0, (struct sockaddr *) &claddr, len) !=
                numBytes)
        {
            printf("sendto");
            exit(1);
        }
    }
}

gre_keepalive_20_cl.c

#include "gre_keepalive_20.h"

int
main(int argc, char *argv[])
{
    struct sockaddr_in6 svaddr;
    int sfd, j;
    size_t msgLen;
    ssize_t numBytes;
    char resp[BUF_SIZE];

    if (argc < 3 || strcmp(argv[1], "--help") == 0)
    {
        printf("%s host-address msg...\n", argv[0]);
        exit(1);
    }

    sfd = socket(AF_INET6, SOCK_DGRAM, 0);      /* Create client socket */
    if (sfd == -1)
    {
        printf("socket");
        exit(1);
    }

    memset(&svaddr, 0, sizeof(struct sockaddr_in6));
    svaddr.sin6_family = AF_INET6;
    svaddr.sin6_port = htons(PORT_NUM);
    if (inet_pton(AF_INET6, argv[1], &svaddr.sin6_addr) <= 0)
    {
        printf("inet_pton failed for address '%s'", argv[1]);
        exit(1);
    }

    /* Send messages to server; echo responses on stdout */

    for (j = 2; j < argc; j++) {
        msgLen = strlen(argv[j]);
        if (sendto(sfd, argv[j], msgLen, 0, (struct sockaddr *) &svaddr,
                    sizeof(struct sockaddr_in6)) != msgLen)
        {
            printf("sendto");
            exit(1);
        }

        numBytes = recvfrom(sfd, resp, BUF_SIZE, 0, NULL, NULL);
        if (numBytes == -1)
        {
            printf("recvfrom");
            exit(1);
        }

        printf("Response %d: %.*s\n", j - 1, (int) numBytes, resp);
    }

    return 0;
}

測試結果

root@(none):/tmp# ./grek_20_sv &
root@(none):/tmp# ./grek_20_cl ::1 hello
Server received 5 bytes from (::1, 46385)
Response 1: HELLO

耐著性子好好的理解每一個細節

⚠️ **GitHub.com Fallback** ⚠️