ip_map.go 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. package dbdata
  2. import (
  3. "errors"
  4. "net"
  5. "time"
  6. )
  7. type IpMap struct {
  8. Id int `json:"id" xorm:"pk autoincr not null"`
  9. IpAddr string `json:"ip_addr" xorm:"varchar(32) not null unique"`
  10. MacAddr string `json:"mac_addr" xorm:"varchar(32) not null unique"`
  11. UniqueMac bool `json:"unique_mac" xorm:"Bool index"`
  12. Username string `json:"username" xorm:"varchar(60)"`
  13. Keep bool `json:"keep" xorm:"Bool"` // 保留 ip-mac 绑定
  14. KeepTime time.Time `json:"keep_time" xorm:"DateTime"`
  15. Note string `json:"note" xorm:"varchar(255)"` // 备注
  16. LastLogin time.Time `json:"last_login" xorm:"DateTime"`
  17. UpdatedAt time.Time `json:"updated_at" xorm:"DateTime updated"`
  18. }
  19. func SetIpMap(v *IpMap) error {
  20. var err error
  21. if len(v.IpAddr) < 4 || len(v.MacAddr) < 6 {
  22. return errors.New("IP或MAC错误")
  23. }
  24. macHw, err := net.ParseMAC(v.MacAddr)
  25. if err != nil {
  26. return errors.New("MAC错误")
  27. }
  28. // 统一macAddr的格式
  29. v.MacAddr = macHw.String()
  30. v.UpdatedAt = time.Now()
  31. if v.Id > 0 {
  32. err = Set(v)
  33. } else {
  34. err = Add(v)
  35. }
  36. return err
  37. }